Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-03-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
Question 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.
Responder Con Cita
  #2  
Antiguo 29-03-2004
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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);
Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 29-03-2004
cahp cahp is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 90
Poder: 21
cahp Va por buen camino
Hola:

mira a ver con 'not in':

select *
from maquinas
where numeroMAQ not in (select distinct numeroMAQ from sesiones)


Espero que te sirva.

Saludos.
Responder Con Cita
  #4  
Antiguo 30-03-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
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))
En tu caso sería utilizar NOT EXISTS para obtener los regristros que no existen además de agregarle la condición del campo booleano que comentas.
Saludos
Responder Con Cita
  #5  
Antiguo 31-03-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 31-03-2004
Ruben_Cu Ruben_Cu is offline
No confirmado
 
Registrado: oct 2003
Ubicación: Mariel, Cuba
Posts: 271
Poder: 0
Ruben_Cu Va por buen camino
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')
Tendrías que conectar el DBLookupComboBox a través de un datasource al Query que estas usando para mostrar el resultado de la busqueda, como estás tomando los registros de tu tabla de nueve máquinas no se te repetirán puesto que en ella deben únicos.
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
Responder Con Cita
  #7  
Antiguo 31-03-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 21
Ignacio Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:59:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi