Extraer diferencias entre 2 tablas
Hola a tod@s! a ver si alguien me puede echar una mano con esto:
Necesito comparar 2 tablas para saber que datos han sido modificado/añadidios/borrados en una respecto a la otra, como podrÃa obtenerlo?
Ojala me podais ayudar. Un Saludo.
Necesito comparar 2 tablas para saber que datos han sido modificado/añadidios/borrados en una respecto a la otra, como podrÃa obtenerlo?
Ojala me podais ayudar. Un Saludo.
Con un programa que recorra la primera tabla y la compare con la segunda, una paja pero es lo que se me ocurrio 1ero.
puede ser el 1er registro de la 1era tabla y el 1er registro de la 2da.
puede ser el 1er registro de la 1era tabla y el 1er registro de la 2da.
Para que la solucion que te aporto te sea valida, se deben dar las siguientes premisas:
1 - que las tablas tengan una clave primaria unica
2 - que tengan pocos campos, sino es un poco pesada de escribir
La idea es codificar una instruccion SQL que realice una combinacion FULL OUTER JOIN entre las dos tablas con la clausula WHERE comparando campo a campo.
Ejemplo: para una tabla con un campo Clave unica (ID) y dos campos (C1, C2) la instruccion serÃa como sigue:
select * from cdm_t1 a full outer join cdm_t2 b on a.id = b.id
where isnull(a.id, 99999) <> isnull(b.id, 99999)
or a.c1 <> b.c1 or a.c2 <> b.c2
Tienes que tener en cuenta en la clausula WHERE que el primer campo comparado es la Clave Unica, que nos va a permitir seleccionar las Altas y Bajas, pero para ello debemos proporcionar un valor de sustitucion al NULL(funcion ISNULL), de no hacerlo asà no las detectaria ya que los valores NULL nunca coinciden con ningun valor en una comparación.
En el resto de campos a comparar tambien teneis que tener en cuenta si permitis valores nulo para realizar la misma operacion de sustituir el valor nulo por cualquier otro valor para que se pueda realizar la comparacion.
Espero que os sirva de algo, hasta pronto
1 - que las tablas tengan una clave primaria unica
2 - que tengan pocos campos, sino es un poco pesada de escribir
La idea es codificar una instruccion SQL que realice una combinacion FULL OUTER JOIN entre las dos tablas con la clausula WHERE comparando campo a campo.
Ejemplo: para una tabla con un campo Clave unica (ID) y dos campos (C1, C2) la instruccion serÃa como sigue:
select * from cdm_t1 a full outer join cdm_t2 b on a.id = b.id
where isnull(a.id, 99999) <> isnull(b.id, 99999)
or a.c1 <> b.c1 or a.c2 <> b.c2
Tienes que tener en cuenta en la clausula WHERE que el primer campo comparado es la Clave Unica, que nos va a permitir seleccionar las Altas y Bajas, pero para ello debemos proporcionar un valor de sustitucion al NULL(funcion ISNULL), de no hacerlo asà no las detectaria ya que los valores NULL nunca coinciden con ningun valor en una comparación.
En el resto de campos a comparar tambien teneis que tener en cuenta si permitis valores nulo para realizar la misma operacion de sustituir el valor nulo por cualquier otro valor para que se pueda realizar la comparacion.
Espero que os sirva de algo, hasta pronto
