2009-03-27 15 views

Antwort

4

Sie ein Tool wie AQT können diffs zwischen Tabellen zu erstellen.

Ein anderer Ansatz wäre, die Tabellen in eine Textdatei zu schreiben und ein Diff-Tool wie WinMerge zu verwenden. Mit diesem Ansatz können Sie komplexes SQL verwenden, um die Tabellen zuerst in dasselbe Layout umzuwandeln.

1

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.

+0

Der Befehl "MERGE" war neu für mich. Das tut in vielen Situationen genau den Trick. – thrag

1

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.

38

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.

3

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.

alt text

1

Schnelle Lösung:

SELECT * FROM TABLE1 
MINUS 
SELECT * FROM TABLE2 

keine Aufzeichnungen zeigen sollte ...

0

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

0

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 +