Vergleicht zwei Tabellen spaltenweise in Oracle

8

Ich habe zwei ähnliche Tabellen in Oracle in zwei verschiedenen Datenbanken. Beispiel: Mein Tabellenname ist EMPLOYEE und der Primärschlüssel ist die Mitarbeiter-ID. Die gleiche Tabelle mit den gleichen Spalten (sagen wir 50 Spalten sind avlbl in zwei Datenbanken und zwei Datenbanken sind verknüpft.

Ich möchte diese beiden Tabellen spaltenweise vergleichen und herausfinden, welche Datensätze nicht übereinstimmen. Ich möchte die spezifische Spalte in jeder Zeile in zwei Tabellen, die nicht übereinstimmen.

    
Defendore 20.10.2010, 17:03
quelle

6 Antworten

15
%Vor%

sollte den Trick machen, wenn Sie dies mit einer Abfrage lösen möchten

    
mcabral 20.10.2010, 17:13
quelle
3

Als eine Alternative, bei der jede Tabelle zweimal vollständig durchsucht wird und Sie auch auf einfache Weise feststellen können, welche Tabelle mehr Zeilen mit einer Kombination von Werten als die andere hatte:

%Vor%

Kredit geht hier: Ссылка

    
Patrick Marchand 21.10.2010 23:06
quelle
1

Versuchen Sie, ein Drittanbieter-Tool zu verwenden, z. B. SQL Data Examiner , das Oracle-Datenbanken vergleicht und Ihnen Unterschiede anzeigt.

>     
SQLDev 20.10.2010 17:40
quelle
1

Es wird nicht schnell sein, und es wird eine Menge für Sie geben (außer Sie generieren die SQL von user_tab_columns), aber hier ist, was ich verwende, wenn ich zwei Tabellen Zeile für Zeile und Spalte vergleichen muss -mit-Spalte.

Die Abfrage gibt alle Zeilen zurück, die

sind
  • Existiert in Tabelle1, aber nicht in Tabelle2
  • Existiert in Tabelle2, aber nicht in Tabelle1
  • Existiert in beiden Tabellen, hat aber mindestens eine Spalte mit einem anderen Wert

(gemeinsame identische Zeilen werden ausgeschlossen).

"PK" ist die Spalte (n), aus der Ihr Primärschlüssel besteht. "a" wird A enthalten, wenn die aktuelle Zeile in table1 existiert. "b" wird B enthalten, wenn die aktuelle Zeile in Tabelle 2 existiert.

%Vor%

Bearbeiten Beispielcode hinzugefügt, um den im Kommentar beschriebenen Unterschied anzuzeigen. Wenn einer der Werte NULL enthält, ist das Ergebnis anders.

%Vor%     
Ronnis 03.12.2010 15:08
quelle
0

Die Verwendung des minus Operators funktionierte, aber es dauerte auch länger, das auszuführen, was nicht akzeptabel war. Ich habe eine ähnliche Art von Anforderung für die Datenmigration und ich habe den Operator NOT IN dafür verwendet. Die modifizierte Abfrage lautet:

%Vor%

Diese Abfrage wurde schnell ausgeführt. Sie können auch eine beliebige Anzahl von Spalten in der Select-Abfrage hinzufügen. Der einzige Haken ist, dass beide Tabellen die exakt gleiche Tabellenstruktur haben müssen, damit dies ausgeführt wird.

    
AKS 27.01.2015 11:59
quelle
0
%Vor%     
Ahmed Bilal 04.05.2015 09:14
quelle