Extrahieren der Unterschiede zwischen zwei Tabellen - MS Access-SQL-Abfrage

Was ich tun müssen, ist die Anzeige alle Unterschiede zwischen den zwei Tabellen;
Alle Datensätze, die vorhanden sind in TABELLE1 aber nicht in TABELLE2, die Datensätze, die vorhanden in TABELLE2 aber nicht "TABELLE1", und die Datensätze, die nicht über eine entsprechende Menge in der anderen Tabelle.

Ich habe zwei Tabellen:

(TABLE 1)
CO_CODE   ACCOUNT_ID   CONTRACT    STATUS          AMT
A         7              101       ACTIVE          5,497.00
A         7              101       ACTIVE          5,482.00
A         15             106       INACTIVE        0.00
A         23             102       ACTIVE          4,562.00
A         31             102       ACTIVE          22.00
A         49             103       ACTIVE          1,900.00
A         49             103       ACTIVE          135.00

(TABLE 2)
Company      Account_Number    Amount      Agreement
A            7                 5,497.00    S000101
A            23                8,457.00    S000102
A            49                135.00      S000103          
A            56                2,465.00    S000104              
A            7                 5,482.00    S000101

Den beiden Tabellen teilen sich die Felder mit der Firma ID-Kontonummer, Betrag und Vereinbarung/Vertrag#, wobei die Vereinbarung in der TABELLE2 ist eine Art Text, die aber numerisch in TABELLE1.

So weit, dass ich mir ausgedacht habe:

SELECT TABLE1.CO_CODE AS Company, TABLE1.ACCOUNT_ID AS [Account Number], TABLE1.CONTRACT As [Contract Number], TABLE1.STATUS AS Status, TABLE1.AMT, TABLE2.Amount
FROM TABLE1 LEFT JOIN TABLE2 ON TABLE1.ACCOUNT_ID = TABLE2.Account_Number
WHERE ((Exists (SELECT * FROM TABLE2 WHERE TABLE1.CO_CODE = TABLE2.Company AND TABLE1.ACCOUNT_ID = TABLE2.Account_number AND TABLE1.CONTRACT = Clng(MID(TABLE2.Agreement,5)) AND TABLE1.AMT = TABLE2.Amount))=False) OR ((Exists (SELECT * FROM TABLE1 WHERE TABLE1.CO_CODE = TABLE2.Company AND TABLE1.ACCOUNT_ID = TABLE2.Account_number AND TABLE1.CONTRACT = Clng(MID(TABLE2.Agreement,5)) AND TABLE1.AMT = TABLE2.Amount))=False)

UNION ALL 

SELECT TABLE2.Company, TABLE2.Account_Number, CLng(MID(TABLE2.Agreement, 5)), TABLE1.ACC_STATUS, TABLE1.AMT, TABLE2.Amount
FROM TABLE2 LEFT JOIN TABLE1 ON TABLE1.ACCOUNT_ID = TABLE2.Account_Number 
WHERE TABLE1.ACCOUNT_ID NOT IN (SELECT Account_Number FROM TABLE2) OR TABLE2.Account_Number NOT IN (SELECT ACCOUNT_ID FROM TABLE1);

Gibt mir das Ergebnis:

Company  Account    Contract    Status       AMT           Amount
A         15         106        INACTIVE     0.00   
A         23         102        ACTIVE       4,562.00      8,457.00
A         31         102        ACTIVE       22.00    
A         49         103        ACTIVE       1,900.00      135.00
A         56         104                                   2,465.00

Konto 49 mit einem Betrag in Höhe von 135.00 sollte nicht die Höhe von 135.00, als es in beiden Tabellen vorkommt, jedoch das amt des 1900.00 korrekt ist (es erscheint nur in TABELLE1).

Könnte mir jemand sagen, warum dies geschieht und wie man es beheben?

Ich entschuldige mich im Voraus für meine mangelnde Kenntnisse in MS Access mit SQL und diese website im Allgemeinen. Ich habe gekämpft, in der vergangenen Woche versucht, herauszufinden, wie Sie die gewünschten Ergebnisse und jede Hilfe würde geschätzt werden.

  • Ich bin nicht selbstbewusst genug, in SQL werden in der Lage, Ihnen zu sagen, wie dieses Problem zu lösen, aber ich denke ich habe eine Idee, warum es passiert ist. Im ersten Teil der Abfrage, bevor die UNION ALL Ihre WHERE Klausel sagt Sie, um zurückzukehren, Spalten aus beiden Tabellen, in denen die Menge ist nicht das gleiche zwischen den beiden Tabellen. Da Konto 49 hat den Betrag 1900 in einer Tabelle, aber nicht die anderen, die WHERE Klausel wird wahr sein, und es werden die Spalten auswählen, die Sie angegeben haben, enthält die Beträge aus beiden Tabellen. Das ist, warum es zeigt, 135 auch wenn es in beiden Tabellen.
  • das scheint wie eine vernünftige Ursache für das problem! Vielen Dank für Ihre Einsicht. Jetzt zu versuchen und dieses Problem beheben..
  • Ist es eine Vorschrift, dass man den Betrag, den Feldern getrennt, oder Sie können kombiniert werden, in einer Spalte?
  • Der Grund, Sie sind GESONDERT ausgewiesen ist, so dass es offensichtlich ist, welche Tabelle die Diskrepanz orginates aus. Zum Beispiel, Konto 56 existiert nur in TABELLE2, klar aus den Ergebnissen.
InformationsquelleAutor user3268296 | 2014-02-05
Schreibe einen Kommentar