Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Registros no coincidentes entre consultas (https://www.clubdelphi.com/foros/showthread.php?t=46784)

drykea 08-08-2007 16:25:33

Registros no coincidentes entre consultas
 
Hola a tod@s.

Tengo un problema que no sé como solucionar.
Uso una base de datos SQL Server y tengo una tabla con x campos, con la clave primaria formada por tres campos.

El problema es que en una insercion masiva de datos, por error se han insertado varios registros 'duplicados' que en realidad no lo son, es decir son iguales en todo menos en la clave primaria.

Lo que quiero es seleccionar los registros mal insertados.
Se pueden diferenciar por 2 de los campos de la PK.

He conseguido una consulta con los campos que se insertaron en la insercion masiva (erroneos o no) y otra con los que ya habia y se han duplicado.

Necesito alguna sentencia que me devuelva los campos que no estan una de las consultas, pero no he sabido hacerlo. He probado con subconsultas pero me devuelve los que sí estan. Algo así:

select * from (select * from tabla1 where campo1 = pk1) as t2

Es muy urgente. Muchas gracias.

ContraVeneno 08-08-2007 16:39:59

Mas bien hay que replantear lo que deseas, porque al hacer
Código SQL [-]
  select * from (select * from tabla1 where campo1 = pk1) as t2


en realidad no estas haciendo mas que lo mismo, nada más que le das una vuelta.

Si ya los tienes identificados, pienso que deberías copiarlos en una tabla temporal y después hacer un join a esa tabla para encontrar lo que buscas.

Ahora que si quieres ver otra forma de borrar registros duplicados, puedes revisar este enlace

drykea 08-08-2007 16:54:02

Perdón creo que no lo he explicado bien.

Tengo dos consultas. Entre los registros de la consulta 1 con pk1, están los registros de la consulta2 con pk2

Lo que quiero es obtener los registros que están en la consulta1 y en la consulta2 a la vez y para poder eliminarlos de la consulta1

GustavoCruz 08-08-2007 18:19:14

Registros no coincidentes entre consultas
 
Hola drykea en ese caso debes hacer una consulta así:

Código SQL [-]
"delete from consulta1 where pk1 in select pk2 from consulta2"

ahora es posible que te funcione esta otra, si la primera no te sirve o no cumple tus espectativas,...

Código SQL [-]
"delete from tabla1 where pk1 in select pk2 from tabla2,tabla1 where pk1=pk2"

espero haberte sido de ayuda.:)


La franja horaria es GMT +2. Ahora son las 17:54:44.

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