Comparar dos tablas en SQL

Como por tercera vez me he topado con la necesidad de comparar 2 tablas identicas que se encuentran ya sea en servidores diferentes, o simplemente es para comparar que registros sufrieron cambios en un periodo de tiempo.

Y como por tercera vez tuve que preguntarle a la misma persona jaja  y para ya no volverle a preguntar mejor lo escribo aquí.

si en algún momento necesitan comparar 2 tablas IDENTICAS (misma cantidad de campos) aquí les va el query que necesitan hacer

SELECT * FROM tabla1 t1
WHERE not exists (
SELECT * FROM tabla2 t2 WHERE t1.campo1 = t2.campo2 and t1.campo2 = t2.campo2 ….
.
.
.
)

con esto obtendran un listado de los registros que sufrieron cambios en alguno de los campos, todavía me falta buscar la manera de poder obtener únicamente los campos que cambiaron, porque para mi caso eran casi 500 campos y tuve que revisar uno por uno, si alguien sabe como hacer esto mas rápido será de mucha ayuda

saludos

  • Trackback are closed
  • Comments (12)
    • Fernando
    • November 2nd, 2010

    Buen dia Daniel.
    Te respondio alguien acerca de como encontrar los campos que sufrieron cambios?
    Estoy justamente con ese problema, como detectar los campos que son diferentes entre los registros de ambas tablas.
    Si sabes como hacerlo, agradeceria muchisimo tu ayuda.
    Saludos!

    • Gaston
    • March 8th, 2011

    HOla quiero saber como comparar dos tablas en una tengo 8 números y en la otra 12. La que tiene 12 contiene los 8 números de la anterior mas 4 números.
    Gracias.

    Gaston

  1. que tal Gaston…

    deberias intentar algo asi como

    select a.inumero from tablacon12numeros a
    full outer join tablacon8numeros b on a.inumero = b.inumero

    te debe de ayudar

    saludos

    • Roderick
    • March 25th, 2011

    Hola yo estoy con algo muy parecido pero lo que requiero es hacer un update de un campo que de una tabla que esta en el mismo servidor pero con nombre de bases de datos distintas.

    tengo lo siguiente:

    base de datos de backups: bd1, tabla: noticias, campos: titulo y campo par1

    base de datos destino: bd2, tabla: noticias, campos: titulo y campo par1

    requiero hacer una consulta que me compare los campos par1 y si coinsiden haga un update en el campo titulo de la base datos de backups a destino.

    por que hago esto?
    me han hakeado y me pusieron datos en todo el campo de titulo lo mismo ahora debo de buscar una forma para remplazar y poner los titulo que considan con los parrafos.

    alguien me puede ayudar por favor.

  2. !!OJO!!
    No fuciona con tablas que contegan campos nulos!!

    cree unSP q me crea toda la sentencia de comparacion Xq tengo tablas d hasta 300 campos, y lo ejecuta pero no funcioa si la tabla tiene nulos.

    • Anonimo
    • October 11th, 2011

    A mi me sirvio de esta manera para saber cuales son los registros que me hacían falta en la otra tabla

    SELECT TABLA1.* FROM TABLA1 LEFT JOIN TABLA2
    ON TABLA1.CAMPO_A = TABLA2.CAMPO_A WHERE TABLA2.CAMPO_A IS NULL;

    Esta consulta me regreso los registros faltantes en la tabla 2 .

    Espero que le sirva a alguien

    • ESTEBAN
    • November 10th, 2011

    Excelente ayuda Anónimo, exactamente lo que estaba buscando !!!

    • gerardo
    • March 28th, 2012

    excelente query me funciono por fin
    saludos

    • Miguel
    • August 8th, 2012

    Campos de Tabla1(cveempresa,cveempleado)
    Campos de TablaA(cveempresa,cveempleado)
    Esos dos campos son una primary compuesta, los empleados de Tabla1 estan ligados a la TablaA.
    La tablaA tiene los datos correctos.

    No se eliminan empleados se pone su estatus=’baja’ y solo se les asigna un nueva cve empleado en la TablaA pero ahora.

    si el empleado Miguel tenia la cveEmpleado=0000258 y cveempresa=0007 en TablaA y en Tabla1.
    pero ahora ya cambio de empresa y ahora tiene cveEmpleado=0000500 y cveempresa=0005

    Lo que quiero hacer es buscar que empleados de Tabla1 ya no corresponden en la tablaA ose que ya estan, asi lo tengo:

    SELECT * FROM BDD1..usuarios u where not exists (
    * from [BDD2]..[trabajadores] t
    where (t.cveempresa=u.cveempresa and t.cvetra=u.NoEmpleado) and t.estatus=’Activo’) and u.estatus=’Activo’

    • Jesus
    • August 31st, 2012

    buenas tardes, tengo 2 tablas, en una tengo 300 (id, tipo_id)registros en la otra 1000 (id, tipo_id, depto), en los 1000 deben estar los 300, pero necesito saber cuales son, donde estan por depto, id y tipo_id

    • gerb
    • September 25th, 2012

    Muchas gracias Daniel’s me sirvió mucho. El día que esté pegado en algo, ahí tiene mi mail, y si le puedo ayudar en algo con mucho gusto.
    Hasta pronto.

    • miss
    • October 6th, 2012

    hola mire yo tengo una duda
    Var = “SELECT descripcion ” _
    & “FROM tipos_equipos ” _
    & “WHERE tipos_equipos.descripcion LIKE ‘” & “*” & Me.txtno.Value & “*” & “‘ ” _

    como vera en mi tabla tipos_equipos tengo un campo que deseo mostrar se llama no_serie pero igual quiero mostrar un vampo llamado descripcion de otra tabla llamada tipos_equipos es para hacer una busqueda osea cuando ingrese no_serie (1145662s6) en un texbox diferente osea descripcion paresca (impresora) ejemplo.


six × 7 =