2009-03-27 24 views

Respuesta

4

Puede utilizar una herramienta como AQT para crear diferenciaciones entre las tablas.

Otro enfoque sería volcar las tablas en un archivo de texto y usar una herramienta diff como WinMerge. Con este enfoque, puede usar SQL complejo para convertir las tablas en el mismo diseño, primero.

1

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.

+0

El comando "MERGE" era nuevo para mí. Eso hace exactamente el truco para muchas situaciones. – thrag

1

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.

38

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.

3

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.

alt text

1

Solución rápida:

SELECT * FROM TABLE1 
MINUS 
SELECT * FROM TABLE2 

No hay registros deben mostrar ...

0

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

0

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 +