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 22-04-2013
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 227
Poder: 14
darkamerico Va por buen camino
Unhappy Listar registros de una Tabla que NO estan en Otra...

Precisamente este es mi problema, tengo dos tablas y deseo realizar una consulta SQL que liste solamente aquellos registros que se encuentran en una de ellas y no se encuentren en la otra.

La Tabla llamada: fise_usuarioxsumin, es la tabla donde existen registros que NO existen en la otra tabla: fise_transicion.

No soy muy bueno en SQL, sin embargo encontre la siguiente forma de SQL que podria resolver el problema:

Código SQL [-]
Select * from t1 where not exists (select 1 from t2 where t2.id = t1.id)

Ambas tablas almacenan informacion por mes y año, lo cual debo tomar en cuenta ( anio='2013' and mes='03' ) por ejemplo.

La estructura de fise_usuarioxsumin es la siguiente:

Código SQL [-]
CREATE TABLE `fise_usuarioxsumin` (
  `idusuarioxsum` int(11) NOT NULL,
  `idusuario_fk` int(11) NOT NULL,
  `rc` varchar(16) NOT NULL,
  `idsuminid_fk` int(11) NOT NULL,
  `idcocina` int(11) NOT NULL,
  `estado` tinyint(4) NOT NULL,
  `anio` varchar(4) NOT NULL,
  `mes` varchar(2) NOT NULL,
  `benef_ApePat` varchar(40) NOT NULL,
  `benef_ApeMat` varchar(40) NOT NULL,
  `benef_Nombres` varchar(40) NOT NULL,
  `benef_DNI` varchar(8) NOT NULL,
  PRIMARY KEY (`idusuarioxsum`),
  KEY `AnioMes` (`anio`,`mes`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Y la estructura de la otra tabla es:

Código SQL [-]
CREATE TABLE `fise_transicion` (
  `id` int(11) NOT NULL,
  `rc` varchar(16) NOT NULL,
  `prop_nombre` varchar(100) NOT NULL,
  `prop_dni` varchar(8) NOT NULL,
  `benef_ApePat` varchar(40) NOT NULL,
  `benef_ApeMat` varchar(40) NOT NULL,
  `benef_Nombres` varchar(40) NOT NULL,
  `benef_DNI` varchar(8) NOT NULL,
  `glosa` varchar(255) NOT NULL,
  `tiene_cocina` char(1) NOT NULL,
  `anio` varchar(4) NOT NULL,
  `mes` varchar(2) NOT NULL,
  `estado` char(1) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Por favor alguien que me ayude con este tema, mi aplicacion esta parada mientras tanto.


Gracias

Americo
Responder Con Cita
  #2  
Antiguo 22-04-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba ha realizar una LEFT JOIN de la primera con la segunda; Eso te debería dar TODOS los registros de la primera y la relación que tienen con los de la segunda tabla. Aquellos registros que en ese tabla tengan la clave de la segunda tabla como NULL, es que no se encuentran en la primera.

Similar, pero con una RIGHT JOIN, te dará los otros.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 22-04-2013
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola,

sería algo así:

Código SQL [-]
SELECT DISTINCTROW Tabla1.Codigo
FROM Tabla1 LEFT JOIN Tabla2 ON Tabla1.codigo = Tabla2.codigo
WHERE (((Tabla2.codigo) Is Null));

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #4  
Antiguo 22-04-2013
darkamerico darkamerico is offline
Miembro
 
Registrado: dic 2010
Posts: 227
Poder: 14
darkamerico Va por buen camino
Wink Saludos

Amigos, me place deciros que me salio de la siguiente forma:

Código SQL [-]
select rc from fise_usuarioxsumin where not exists (select 1 from fise_transicion where fise_transicion.rc=fise_usuarioxsumin.rc 
and fise_transicion.anio='2013' and fise_transicion.mes='01') and fise_usuarioxsumin.anio='2013' and fise_usuarioxsumin.mes='03'

Bendito SQL!!

jeje

Saludos
Responder Con Cita
  #5  
Antiguo 22-04-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Ahora que ya lo tienes así y que te funciona, yo probaría con JOIN, ya que son mucho más eficientes que esta otra manera.
A malas ya lo tienes así...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 29-04-2013
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Cita:
Empezado por darkamerico Ver Mensaje
..No soy muy bueno en SQL...


Si me permites te aconsejaría que dediques un tiempo a estudiar y documentarte sobre el Lenguaje SQL.

Así lograrás tener autonomía y podrás enfrentar futuros dudas de la mejor manera...

Saludos cordiales
Responder Con Cita
  #7  
Antiguo 29-04-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 20
ozsWizzard Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
Ahora que ya lo tienes así y que te funciona, yo probaría con JOIN, ya que son mucho más eficientes que esta otra manera.
A malas ya lo tienes así...
Yo no tengo eso tan claro. Me ha asaltado la duda a leer tan severa afirmación y he encontrado esto

http://explainextended.com/2009/09/1...ll-sql-server/

Viene a decir, para Sql Server, todo lo contrario. Mi inglés no es muy bueno pero es la conclusión que saco de That’s why the LEFT JOIN / IS NULL query takes 810 ms, or 3 times as much as the NOT EXISTS / NOT IN query.

De todas formas, tengo aquí Sql Server, lo he probado y parece que el enlace que he puesto tiene razón.

En la imagen que subo se puede ver arriba el resultado el "NOT EXISTS" y abajo el "LEFT JOIN"

Saludos
Imágenes Adjuntas
Tipo de Archivo: jpg Resultado Prueba.jpg (27,5 KB, 7 visitas)
__________________
La Madurez se llama...
~~~Gaia~~~
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
buscar registros que estan en una tabla que no estan en otra microbiano SQL 5 02-06-2013 01:04:53
Listar las aplicaciones que se están ejecutando razonasistemas API de Windows 3 10-12-2011 04:12:43
enviar registros de una tabla a un campo de otra tabla a travez de ciclo IF en MYSQL CLUSTERBIT SQL 8 23-10-2008 15:50:03
Obtener elementos de una tabla que no estan en otra Durbed SQL 4 29-12-2005 13:27:20
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 03:37:05.


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