Supongamos que tengo dos tablas, t1 y t2 que son idénticas en el diseño pero que pueden contener datos diferentes.oracle diff: cómo comparar dos tablas?
¿Cuál es la mejor manera de diferenciar estas dos tablas?
Supongamos que tengo dos tablas, t1 y t2 que son idénticas en el diseño pero que pueden contener datos diferentes.oracle diff: cómo comparar dos tablas?
¿Cuál es la mejor manera de diferenciar estas dos tablas?
Usted puede intentar usar operaciones de conjuntos: MINUS
y INTERSECT
ver aquí para más detalles: http://oreilly.com/catalog/mastorasql/chapter/ch07.html
Para este tipo de pregunta, creo que debe ser muy específico sobre lo que está buscando, ya que hay muchas maneras de interpretarlo y muchos enfoques diferentes. Algunos enfoques van a ser un martillo demasiado grande si su pregunta no lo justifica.
En el nivel más simple, hay "¿Los datos de la tabla son exactamente iguales o no?", Que podría intentar responder con una simple comparación de conteos antes de pasar a algo más complejo.
En el otro extremo de la escala hay "muéstrame las filas de cada tabla para la que no hay una fila equivalente en la otra tabla" o "muéstrame dónde las filas tienen la misma clave de identificación pero diferentes valores de datos" .
Si realmente desea sincronizar la Tabla A con la Tabla B, entonces podría ser relativamente sencillo, utilizando un comando MERGE.
El comando "MERGE" era nuevo para mí. Eso hace exactamente el truco para muchas situaciones. – thrag
Si tiene dinero para gastar, use la herramienta PowerDIFF para Oracle: http://www.orbit-db.com. Viene con una serie de opciones de comparación y hace este tipo de trabajos de manera excelente.
Prueba esto:
(select * from T1 minus select * from T2) -- all rows that are in T1 but not in T2
union all
(select * from T2 minus select * from T1) -- all rows that are in T2 but not in T1
;
No hay ninguna herramienta externa. No hay problemas de rendimiento con union all
.
Puede probar dbForge Data Compare for Oracle, ** herramienta de interfaz gráfica de usuario gratuita para la comparación y sincronización de datos, que puede realizar estas acciones en toda la base de datos o parcialmente.
Solución rápida:
SELECT * FROM TABLE1
MINUS
SELECT * FROM TABLE2
No hay registros deben mostrar ...
select * from table1 where table1.col1 in (select table2.col1 from table2)
Suponiendo col1
es la columna de clave principal y esto le dará todas las filas de table1
respectiva a la columna 1 de table2
.
select * from table1 where table1.col1 not in (select table2.col1 from table2)
Esperanza esto ayuda
Probar:
select distinct T1.id
from TABLE1 T1
where not exists (select distinct T2.id
from TABLE2 T2
where T2.id = T1.id)
Con 11g de Oracle SQL +
El implícita distinta en los que sería perjudicial para el rendimiento sin embargo. –