Encontrar los registros diferentes entre 2 tablas

Publicado: 18 de febrero de 2015 en Actualidad

Encontrar los registros diferentes entre 2 tablas

Publicado por Novato SQL (2 intervenciones) el 01/02/2011 01:42:24

Hola a todos.

Necesito comparar registros de 2 tablas entre si.

Dichas tablas poseen la misma estructura los mismos índices aunque los registros podrían diferir en alguno de sus campos, estas tablas poseen mas de 200 campos.

Se trata de registros que han evolucionado en un proceso, y si bien generalmente todo se mantiene igual, hay veces que algún registro cambia en alguno de sus campos.

Sería algo así:
Tabla_original y Tabla_final, ambas con la misma cantidad de registros, la misma estructura, y los mismos índices, aunque pueden variar en el contenido de sus campos.

Lo que necesito es que el resultado de la consulta me muestre los registros que evolucionaron, es decir los que son diferentes del original (Tabla_original).

Es decir que…

si el campo_48 del registro id_5324 de la Tabla_original difiere
del campo_48 del registro id_5324 de la Tabla_final
(significa que ese registro evolucionó) entonces quiero que me lo muestre.

No se si fui del todo claro en lo que quiero hacer.

Desde ya gracias por responder.

RE:Encontrar los registros diferentes entre 2 tabl

Publicado por Leonardo Josué (71 intervenciones) el 01/02/2011 19:31:21

Hola Novato SQL, creo que lo que necesitas hacer es utilizar el operador EXCEPT, de tal manera que te regresa todos los registros existentes en la tabla original que tienen alguna diferencia en cualquiera de sus campos, sería más o menos así:

declare @tabla_original table (campo1 int, campo2 varchar(15))
insert into @tabla_original values (1, ‘uno’)
insert into @tabla_original values (2, ‘dos’)
insert into @tabla_original values (3, ‘tres’)
insert into @tabla_original values (4, ‘cuatro’)

declare @tabla_final table (campo1 int, campo2 varchar(15))
insert into @tabla_final values (3, ‘tress’)
insert into @tabla_final values (2, ‘dos’)
insert into @tabla_final values (1, ‘uno’)
insert into @tabla_final values (44, ‘cuatro’)

select * from @tabla_final
except
select * from @tabla_original

Esta consulta te regresaría lo siguiente:

campo1|campo2
1|tress
44|cuatro

es decir, los registros 2 y 3 son idénticos tanto en la tabla original como en la final, por lo tanto no han sufrido ningún cambio.

El registro 3 existen ambas tablas, pero el campo2 es diferente, ya que en una aparece como "tres" y en otra como "tress". para el caso del registro 44 este no existe en la tabla original a pesar de que hay otro registro con campo2 exactamente igual.

Saludos y espero que esto sea lo que necesitas.
Leo.

RE:Encontrar los registros diferentes entre 2 tabl

Publicado por Novato SQL (2 intervenciones) el 02/02/2011 16:09:02

Hola Leonardo, muchas gracias por responder tan prontamente.

Tu respuesta me sirvió mucho, ya que me dio una punta para investigar en la web… encontré en http://www.tierrafertil.com/index.php?option=com_content&view=article&id=59&Itemid=67
más información acerca del uso de EXCEPT y finalmente pude adaptar perfectamente a mi situación con algunos pequeños ajustes:

select * FROM
(select * from @tabla_final
except
select * from @tabla_original ) as primera

union

select * FROM
(select * from @tabla_original
except
select * from @tabla_final ) as segunda

tu respuesta realmente me sirvio mucho…

Muchas gracias.

RE:Encontrar los registros diferentes entre 2 tabl

Publicado por Klinsamnn (1 intervención) el 24/09/2013 21:28:53

Te pasaste gracias eee

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s