Supponiamo di avere due tabelle, t1 e t2 che sono identiche nel layout ma che possono contenere dati diversi.diff oracle: come confrontare due tabelle?
Qual è il modo migliore per diffare queste due tabelle?
Supponiamo di avere due tabelle, t1 e t2 che sono identiche nel layout ma che possono contenere dati diversi.diff oracle: come confrontare due tabelle?
Qual è il modo migliore per diffare queste due tabelle?
È possibile utilizzare uno strumento come AQT per creare diff tra tabelle.
Un altro approccio sarebbe quello di scaricare le tabelle in un file di testo e utilizzare uno strumento diff come WinMerge. Con questo approccio, è possibile utilizzare SQL complesso per trasformare le tabelle nello stesso layout, in primo luogo.
Puoi provare a utilizzare le operazioni di set: MINUS
e INTERSECT
Vedi qui per maggiori dettagli: http://oreilly.com/catalog/mastorasql/chapter/ch07.html
Per questo tipo di domanda, penso che devi essere molto specifico su ciò che stai cercando, poiché ci sono molti modi di interpretarlo e molti approcci diversi. Alcuni approcci saranno troppo grandi se la tua domanda non lo giustifica.
Al livello più semplice, c'è "I dati della tabella sono esattamente uguali o no?", Che è possibile tentare di rispondere con un semplice confronto dei conteggi prima di passare a qualcosa di più complesso.
All'altra estremità della scala c'è "mostrami le righe di ogni tabella per le quali non c'è una riga equivalente nell'altra tabella" o "mostrami dove le righe hanno la stessa chiave di identificazione ma valori di dati diversi" .
Se in realtà si desidera sincronizzare la Tabella A con la Tabella B, allora potrebbe essere relativamente semplice, utilizzando un comando MERGE.
Il comando "MERGE" era nuovo per me. Questo fa esattamente il trucco per molte situazioni. – thrag
Se si dispone di denaro da spendere, utilizzare lo strumento PowerDIFF per Oracle: http://www.orbit-db.com. Viene fornito con una serie di opzioni di confronto e fa questi tipi di lavoro in modo eccellente.
Prova questo:
(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 strumento esterno. Nessun problema di prestazioni con union all
.
Si può provare dbForge Data Compare for Oracle, uno strumento ** gratuito GUI per il confronto e la sincronizzazione dei dati, che può fare queste azioni su tutto il database o parzialmente.
soluzione veloce:
SELECT * FROM TABLE1
MINUS
SELECT * FROM TABLE2
No records dovrebbero mostrare ...
select * from table1 where table1.col1 in (select table2.col1 from table2)
Supponendo col1
è la colonna di chiave primaria e questo vi darà tutte le righe in table1
rispettivo alla colonna.
select * from table1 where table1.col1 not in (select table2.col1 from table2)
Spero che questo aiuti
Prova:
select distinct T1.id
from TABLE1 T1
where not exists (select distinct T2.id
from TABLE2 T2
where T2.id = T1.id)
con SQL Oracle 11g +
L'implicita distinto su quelli sarebbe svantaggioso per le prestazioni però. –