FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Registros de una tabla que no se encuentren en otra
Tengo una tabla MAQUINAS, sus campos son NumeroMAQ y NombreMAQ.
Tengo otra tabla SESIONES la cual almacena la hora inicial y final de cada sesión, y el numero de máquina usada en dicha sesión. Mi intensión es mostrar una lista de maquinas que en ese momento no se encuentren en la tabla SESIONES o que si se encuentren tengan la condición de sesión cerrada, almacenada en un campo lógico. |
#2
|
||||
|
||||
Este ejemplo lo acabo de construir con el asistente gráfico de consultas de Access:
Código:
SELECT DISTINCTROW [TB_ALUMNOS].[NOMBRE], [TB_ALUMNOS].[APELLIDOS], [TB_ALUMNOS].[DNI] FROM TB_ALUMNOS LEFT JOIN TB_ALUMNOS_CURSOS ON [TB_ALUMNOS].[Matricula] = [TB_ALUMNOS_CURSOS].[MATRICULA] WHERE ([TB_ALUMNOS_CURSOS].[MATRICULA] Is Null);
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
|||
|
|||
Hola:
mira a ver con 'not in': select * from maquinas where numeroMAQ not in (select distinct numeroMAQ from sesiones) Espero que te sirva. Saludos. |
#4
|
|||
|
|||
Hola Ignacio, puedes usar el predicado Exists(para eso está concebido), te pongo un ejemplo que pudieras adecuar a tu proyecto sacado de la ayuda de SQL.
Código:
SELECT O.OrderNo, O.CustNo FROM Orders O WHERE EXISTS (SELECT C.CustNo FROM Customer C WHERE (C.CustNo = O.CustNo)) Saludos |
#5
|
|||
|
|||
Muchas gracias por la ayuda a los tres.
Las cosas que me han sugerido me solucionan la mitad del problema. Quizas debería explicar más y mejor el caso donde debo aplicar la consulta. Tengo 9 maquinas en una tabla. Cada sesión de internet de un ciber, que se guardan en la tabla SESIONES tiene un campo llamado MaquinaSES que almacena el numero de máquina, dicha sesión tambien tiene un campo llamado EstadoSES que vale 1 cuando la sesión está activa. Mi intención es ver en un DBlookupComboBox una lista de las máquinas que no esten en la tabla SESIONES y las que si están (y de hecho puede estar más de una ves*), pero que en el campo EstadoSES ses distinto de "1", valor que indica que esa máquina está en uso. *Ojo. Debo evitar que una máquina aparezca más de una vez. Tengo la impresión de haber visto en algun hilo la forma de mostrar una sola ves un registro que se encuentre mas de una vez. Espero aberme explicado. Mucha gracias por la ayuda hasta ahora recibida y por la que seguramente me darán. |
#6
|
|||
|
|||
Bueno, continuando con el tema te propongo que pruebes con al como esto:
Código:
SELECT t.nomaquina FROM tablamaquinas t WHERE not EXISTS (SELECT s.MaquinaSES FROM SESIONES S WHERE (s.MaquinaSES = t.nomaquina) and s.EstadoSES='1') Esto no lo he probado pero si te presenta problemas vuelves por acá o analiza que te está devolviendo y donde puede estar la dificultad. Ahh... si el campo EstadoSESes para determinar solo si la máquina está en uso o no creo que te iría mejor un campo booleano. Saludos y suerte |
#7
|
|||
|
|||
Gracias nuevamente.
Andubo perfecto. Solo me estaba faltando la última condición s.EstadoSES='1'. Con respecto al campo EstadoSES, no es boolean porque puede tener 3 estados posibles. 1=Abierta, 2=cerrada y 3=Anulada. Hasta la próxima |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|