Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-03-2018
andres_89 andres_89 is offline
Miembro
 
Registrado: Dec 2013
Posts: 44
Poder: 0
andres_89 Va por buen camino
Seleccionar registros de una tabla que no existen en 2 tablas

Buen día amigos,

Tengo un problema con una consulta sql, tengo 3 tablas (clientes, clientes_puntuales y clientes_antiguos), en la tabla "clientes" tengo todos los clientes, de los cuales algunos de ellos estan en "clientes_puntuales" y en "clientes_antiguos" a la vez.

Lo que requiero es obtener todos los registros de "clientes" que no esten en "clientes_puntuales" y en "clientes_antiguos", pero no logró armar dicho query, dejo mi query realizado:

Código SQL [-]
SELECT nombre FROM clientes 
WHERE NOT EXISTS (SELECT * FROM  clientes_puntuales WHERE clientes.nombre = clientes_puntuales.nombre)  
UNION 
SELECT nombre FROM clientes 
WHERE NOT EXISTS (SELECT * FROM  clientes_antiguos WHERE clientes.nombre = clientes_antiguos.nombre)

Lo que me devuelve la consulta son todos los registros de ambas tablas, y solo quiero obtener los registros de "clientes" que no estan en ambas tablas, ejemplo:

Tengo 3 registros en mi tabla "cliente" = (juan, marco, daniel)
Tengo 2 registros en mi tabla "cliente_puntuales" = (juan, marco)
Tengo 2 registros en mi tabla "cliente_antiguos" = (juan, marco)

y deseo obtener en este caso los registros de "clientes" que no estan en ambas tablas ("cliente_puntuales" y "cliente_antiguos") que es (daniel).
Espero puedan ayudarme, se los agradezco de antemano.
Saludos.

Última edición por andres_89 fecha: 25-03-2018 a las 21:13:29.
Responder Con Cita
  #2  
Antiguo 25-03-2018
andres_89 andres_89 is offline
Miembro
 
Registrado: Dec 2013
Posts: 44
Poder: 0
andres_89 Va por buen camino
Seleccionar registros de una tabla que no existen en 2 tablas

Estoy utilizando Mysql.

Última edición por andres_89 fecha: 25-03-2018 a las 21:14:30.
Responder Con Cita
  #3  
Antiguo 25-03-2018
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: May 2008
Ubicación: Bogotá
Posts: 505
Poder: 11
TOPX Va camino a la fama
Buen día,
Código SQL [-]
SELECT clientes.nombre 
FROM clientes 
  LEFT OUTER JOIN clientes_puntuales 
    ON clientes.nombre = clientes_puntuales.nombre
  LEFT OUTER JOIN clientes_antiguos 
    ON clientes.nombre = clientes_antiguos.nombre
WHERE clientes_puntuales.nombre IS NULL
  AND clientes_antiguos.nombre IS NULL
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #4  
Antiguo 25-03-2018
andres_89 andres_89 is offline
Miembro
 
Registrado: Dec 2013
Posts: 44
Poder: 0
andres_89 Va por buen camino
Cita:
Empezado por TOPX Ver Mensaje
Buen día,
Código SQL [-]SELECT clientes.nombre FROM clientes LEFT OUTER JOIN clientes_puntuales ON clientes.nombre = clientes_puntuales.nombre LEFT OUTER JOIN clientes_antiguos ON clientes.nombre = clientes_antiguos.nombre WHERE clientes_puntuales.nombre IS NULL AND clientes_antiguos.nombre IS NULL

-
Hola TOPX,

Me sale un error de sintaxis que "falta operador".
saludos.
Responder Con Cita
  #5  
Antiguo 26-03-2018
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: Mar 2004
Ubicación: Cuba
Posts: 676
Poder: 15
yusnerqui Va por buen camino
Pues lo acabo de probar y funciona perfecto con solo copiarlo y pegarlo, revisa si lo estás poniendo en un procedimiento almacenado o algo pq la query está correcta.

Saludos.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #6  
Antiguo 26-03-2018
andres_89 andres_89 is offline
Miembro
 
Registrado: Dec 2013
Posts: 44
Poder: 0
andres_89 Va por buen camino
Cita:
Empezado por yusnerqui Ver Mensaje
Pues lo acabo de probar y funciona perfecto con solo copiarlo y pegarlo, revisa si lo estás poniendo en un procedimiento almacenado o algo pq la query está correcta.

Saludos.
Hola , si, ya lo probe, funciona bien, era error mío al tipearlo, gracias TOPX.
Saludos.
Responder Con Cita
  #7  
Antiguo 26-03-2018
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: Jul 2005
Ubicación: Murcia (España)
Posts: 906
Poder: 13
ElDioni Va por buen camino
De todas formas te digo que también lo puedes hacer como lo estabas planteando en un principio, con exists, lo único que tu consulta yo la dejaría de esta forma.

Código SQL [-]
SELECT nombre FROM clientes  
WHERE NOT EXISTS (SELECT nombre FROM  clientes_puntuales WHERE clientes.nombre = clientes_puntuales.nombre)   
AND NOT EXISTS (SELECT nombre FROM  clientes_antiguos WHERE clientes.nombre = clientes_antiguos.nombre)

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #8  
Antiguo 29-03-2018
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: Mar 2004
Ubicación: Cuba
Posts: 676
Poder: 15
yusnerqui Va por buen camino
Cita:
Empezado por ElDioni Ver Mensaje
De todas formas te digo que también lo puedes hacer como lo estabas planteando en un principio, con exists, lo único que tu consulta yo la dejaría de esta forma.
Saludos.

Pues me gustaría que explicara por qué la dejaría así, ya que del modo que planteas, usando sub consultas tienes que esperar que se creen las dos tablas resultados para después comparar y generar la tabla resultado principal, de lo contrario, usando los inner join la comparación se realiza al tiempo que se está generando la consulta principal, por lo que en este caso particular debería tener mejor rendimiento.

Saludos.
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #9  
Antiguo Hace 1 Semana
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: Jul 2005
Ubicación: Murcia (España)
Posts: 906
Poder: 13
ElDioni Va por buen camino
No me había dado cuenta de tu pregunta yusnerqui.


En realidad no me refería a que fuera la mejor opción, solo que, en caso de que lo quisiera plantear con exist hacerle saber que se puede pero que, yo lo dejaría de la forma que le puse.


Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
seleccionar los ultimos registros de una tabla ingabraham SQL 16 21-02-2015 01:08:33
Seleccionar un numero determinado de registros de una tabla NPIdea Firebird e Interbase 8 26-11-2008 19:50:46
seleccionar los ultimos registros de una tabla JODELSA SQL 1 04-10-2006 15:27:41
Seleccionar todos los registros de una tabla menos 2 FunBit MySQL 4 13-07-2005 17:06:31
Seleccionar registros en una tabla, envio, e insercion en otra tabla!! EfrainSanmiguel Conexión con bases de datos 3 21-10-2004 01:12:43


La franja horaria es GMT +2. Ahora son las 00:34:45.


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