Angenommen, ich habe zwei Tabellen, t1 und t2, die im Layout identisch sind, aber unterschiedliche Daten enthalten können.oracle diff: Wie zwei Tabellen zu vergleichen?
Was ist der beste Weg, diese beiden Tabellen zu unterscheiden?
Angenommen, ich habe zwei Tabellen, t1 und t2, die im Layout identisch sind, aber unterschiedliche Daten enthalten können.oracle diff: Wie zwei Tabellen zu vergleichen?
Was ist der beste Weg, diese beiden Tabellen zu unterscheiden?
können Sie versuchen, Set-Operationen mit: MINUS
und INTERSECT
Sehen Sie hier für weitere Informationen: http://oreilly.com/catalog/mastorasql/chapter/ch07.html
Für diese Art von Frage denke ich, Sie müssen sehr genau sein, was Sie suchen, da es viele Möglichkeiten gibt, es zu interpretieren und viele verschiedene Ansätze. Einige Ansätze werden zu groß sein, wenn Ihre Frage dies nicht garantiert.
Auf der einfachsten Ebene gibt es "Ist die Tabelle Daten genau gleich oder nicht?", Die Sie versuchen könnten, mit einem einfachen Count-Vergleich zu beantworten, bevor Sie zu etwas komplexeren gehen.
Am anderen Ende der Skala gibt es "zeigen Sie mir die Zeilen aus jeder Tabelle, für die es keine äquivalente Zeile in der anderen Tabelle gibt" oder "zeigen Sie mir, wo Zeilen den gleichen identifizierenden Schlüssel aber unterschiedliche Datenwerte haben" .
Wenn Sie tatsächlich Tabelle A mit Tabelle B synchronisieren möchten, ist das mit einem MERGE-Befehl relativ einfach.
Der Befehl "MERGE" war neu für mich. Das tut in vielen Situationen genau den Trick. – thrag
Wenn Sie etwas Geld ausgeben müssen, verwenden Sie das Tool PowerDIFF für Oracle: http://www.orbit-db.com. Es kommt mit einer Reihe von Vergleichsoptionen und macht diese Art von Jobs hervorragend.
Versuchen Sie folgendes:
(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
;
kein externes Tool. Keine Leistungsprobleme mit union all
.
Sie können versuchen, dbForge Data Compare for Oracle, ein ** kostenloses GUI-Tool für Datenvergleich und Synchronisation, die diese Aktionen über die gesamte Datenbank oder teilweise tun können.
Schnelle Lösung:
SELECT * FROM TABLE1
MINUS
SELECT * FROM TABLE2
keine Aufzeichnungen zeigen sollte ...
select * from table1 where table1.col1 in (select table2.col1 from table2)
Unter der Annahme, col1
die Primärschlüsselspalte ist, und dies wird alle Zeilen in table1
geben entsprechend der table2
Spalte 1.
select * from table1 where table1.col1 not in (select table2.col1 from table2)
hoffe, das hilft
Versuchen:
select distinct T1.id
from TABLE1 T1
where not exists (select distinct T2.id
from TABLE2 T2
where T2.id = T1.id)
SQL Oracle 11g +
Die implizite verschieden auf diejenigen wäre allerdings für die Leistung nachteilig sein. –