none
Compar registros en sql RRS feed

  • Pregunta

  • Hola a todos, estoy algo trabado en una consulta que deseo hacer en sql.

    De momento tengo dos tablas ambas con los mismos campos y lo que necesito hacer es recorrer ambas tablas comparando registro por registro para saber que datos de la tabla1 faltan en la tabla2 y viceversa, se que facilmente lo podria hacer con un left outer join o right outer join pero al momento de realizar la consulta tambien deberia insertar el valor faltante en la tabla determinada.

    Agradezco de antemano toda la ayuda posible.

    lunes, 9 de octubre de 2017 22:25

Respuestas

  • Tienes varias formas de recuperar las filas "faltantes", mediante OUTER JOIN, EXISTS, IN, EXCEPT, etc., queda claro que debes de escribir dos consultas de inserción para igualar ambas tablas, por ejemplo:

    -- Insertar filas faltantes en la tabla TableA
    INSERT INTO TableA
    SELECT * FROM TableB
    EXCEPT
    SELECT * FROM TableA
    GO
    
    -- Insertar filas faltantes en la tabla TableB
    INSERT INTO TableB
    SELECT *
    FROM TableA t1 WHERE NOT EXISTS (SELECT 1 FROM TableB t2 WHERE t1.id = t2.id)
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    martes, 10 de octubre de 2017 4:15

Todas las respuestas

  • Saludos

    El operador except existe para este tipo de comparaciones.

    https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql

    lunes, 9 de octubre de 2017 22:33
  • Tienes varias formas de recuperar las filas "faltantes", mediante OUTER JOIN, EXISTS, IN, EXCEPT, etc., queda claro que debes de escribir dos consultas de inserción para igualar ambas tablas, por ejemplo:

    -- Insertar filas faltantes en la tabla TableA
    INSERT INTO TableA
    SELECT * FROM TableB
    EXCEPT
    SELECT * FROM TableA
    GO
    
    -- Insertar filas faltantes en la tabla TableB
    INSERT INTO TableB
    SELECT *
    FROM TableA t1 WHERE NOT EXISTS (SELECT 1 FROM TableB t2 WHERE t1.id = t2.id)
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    martes, 10 de octubre de 2017 4:15