Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Comparar tablas (https://www.clubdelphi.com/foros/showthread.php?t=61375)

mightydragonlor 05-11-2008 16:57:26

Comparar tablas
 
Hola a todos, tengo una inmensa duda que espero que ayuden a aclarar,
resulta que tengo 2 tablas, Tabla1 y Tabla2, necesito hacer una consulta que
devuelva todos los registros de la Tabla1 que no existan en la tabla2, si alguien tiene una idea, le agradeceré mucho, gracias.

Caro 05-11-2008 17:09:43

Hola mightydragonlor, tendría que ser algo así.

Código SQL [-]
Select t1.* 
From tabla1 t1 
left join tabla2 t2 on (t1.campo1=t2.campo1 and t1.campo2=t2.campo2 and t1.campo3=t2.campo3)
Where t2.campo1 is null

Saluditos

mightydragonlor 05-11-2008 17:16:01

Hola Caro muchas gracias, voy a probarlo y luego te cuento.

ContraVeneno 05-11-2008 17:50:12

¿que no era "left outer"?

hecospina 05-11-2008 18:00:51

como dice Contraveneno es
Código SQL [-]
Select t1.* From tabla1 t1 left outer join tabla2 t2 on (t1.campo1=t2.campo1 and t1.campo2=t2.campo2 and t1.campo3=t2.campo3)Where t2.campo1 is null

Caro 05-11-2008 18:28:15

Holas, que yo sepa la palabra Outer es opcional, con el Outer o sin el Outer me da el mismo resultado (utilizo firebird), me devuelve todos los registros de la tabla de la izquierda t1 y con la condición t2.campo1 is null, se obtine los registros que no tienen su correspondiente en t2.

Si estoy mal, expliquenme la diferencia por favor.

Saluditos

ContraVeneno 05-11-2008 18:35:59

la diferencia es que tu usas Firebird y yo SQL Server :D

Caro 05-11-2008 18:42:43

Cita:

Empezado por ContraVeneno (Mensaje 324338)
la diferencia es que tu usas Firebird y yo SQL Server :D

Muy buena respuesta amiguito :D.

Saluditos

pinkpanter 05-11-2008 18:44:10

Las dos tablas tienen la misma estructura? Una es la copia de la otra?
Si es asi, puedes utilizar exists

Código SQL [-]
select * from tabla1 where not exists (select * from tabla2)

Si no tienen la misma estructura puedes o:

Código SQL [-]
 
select * from tabla1 where not exists (select * from tabla2 where tabla1.id=tabla2.id)

o

Código SQL [-]
 
select * from tabla1 where tabla1.id not in( select tabla2.id from tabla2)

Tampoco sé que base de datos utilizas....

mightydragonlor 05-11-2008 18:55:31

Estoy utilizando SQL Server 2000,
con esté código no me dá el resultado correcto.
Código SQL [-]
Select t1.* From tabla1 t1 
left join tabla2 t2 on (t1.campo1=t2.campo1 and t1.campo2=t2.campo2 and t1.campo3=t2.campo3)
Where t2.campo1 is null
se que en la tabla1 hay unos 800 registros que no hay en la tabla2
pero solo me devuelve unos 200 registros.

Caro 05-11-2008 19:02:34

Cita:

Empezado por mightydragonlor (Mensaje 324346)
Estoy utilizando SQL Server 2000,
con esté código no me dá el resultado correcto.

Prueba poniendo el Outer como te han indicado.

Saluditos

ContraVeneno 05-11-2008 19:02:51

por eso digo que es con "left outer join"

mightydragonlor 07-11-2008 18:53:24

Gracias a todos por sus respuestas, efectivamente es la solución que me dió ContraVeneno, gracias de nuevo por ayudarme.


La franja horaria es GMT +2. Ahora son las 06:04:02.

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