Principales respuestas
Compar registros en sql

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.
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.- Propuesto como respuesta Juan MondragónModerator martes, 10 de octubre de 2017 16:59
- Marcado como respuesta Juan MondragónModerator lunes, 16 de octubre de 2017 20:55
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
- Propuesto como respuesta Brayan De La Cruz lunes, 9 de octubre de 2017 22:40
-
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.- Propuesto como respuesta Juan MondragónModerator martes, 10 de octubre de 2017 16:59
- Marcado como respuesta Juan MondragónModerator lunes, 16 de octubre de 2017 20:55