2016-05-03 16 views
0

Ich habe zwei Tabellen. Diese zwei Tabellen können IDs haben, die nicht übereinstimmen. Sie können jedoch auch Namen oder Adressen enthalten, die nicht übereinstimmen. Ich muss in der Lage sein, nicht nur IDs, sondern Vorname, Nachname und Straße_1 aus meiner Liste herauszufiltern. Ich kann einen JOIN bei Match-IDs machen, aber manchmal stimmen sie überein, aber die anderen Spalten können Datensätze enthalten, die nicht übereinstimmen, die ich anzeigen müsste.Zeige mehrere nicht übereinstimmende Datensätze in SQL

Finden Sie IDs, die nicht übereinstimmen. Wenn sie übereinstimmen, sehen Sie, ob eines der anderen Felder nicht übereinstimmt.

Hier sind meine Ergebnisse zu erwarten:

id first_name_2 last_name_2 street_1    street_2 
3 Teresa   White  834 Green Ridge Hill 43 Arapahoe Park 
6 Rebecca   George  39157 Nelson Hill  7467 Acker Center 
7 Ann    Hawkins  341 Tennessee Street 8 Bunting Street 
8 Joyce   Moreno  0277 Bunker Hill Drive 6 Nancy Center 
9 Kimberly  Alvarez  57332 Di Loreto Lane 0437 Waubesa Avenue 

ID 3 & 6 in der Liste ist, weil der Name nicht übereinstimmt. ID 7 ist der Nachname und street_1. ID 8 & 9 IDs stimmen nicht überein.

Hier ist mein Beispieldaten als Referenz: http://sqlfiddle.com#!9/928568/2

+0

Das SQL-Fiddle verwendet MySQL, so dass ich das SQL Server-Tag entfernt –

Antwort

1

Ich würde folgendes tun: Linke Füge- und Nullen als leere Zeichenfolgen zu behandeln. Wenn Sie ein berechtigtes leere Zeichenkette, street_2 zum Beispiel haben, kann es falsch positive Ergebnisse zurück:

SELECT * 
FROM information I1 
    LEFT JOIN information_2 I2 ON I1.id = I2.id 
WHERE (I1.first_name_2 <> ifnull(I2.first_name_2, '') 
     OR I1.last_name_2 <> ifnull(I2.last_name_2, '') 
     OR I1.street_1 <> ifnull(I2.street_1, '') 
     OR I1.street_2 <> ifnull(I2.street_2, '') 
    ); 
0

Hallo ich durch die Beispieldaten Referenz ging und ich fühle mich Ihre Anforderung ist es, alle Tupel exakte Kopie dessen zu finden getestet habe ich diese auf Ihrem feedle und es gibt das erwartete Ergebnis

ist nicht da in der zweiten Tabelle in dort

Sie den folgenden SQL Code verwenden können

SELECT 
i.id, i.first_name_2, i.last_name_2, i.street_1, i.street_2 
FROM 
    information i 
LEFT JOIN 
information_2 i2 
ON 
i.id=i2.id AND i.first_name_2=i2.first_name_2 AND i.last_name_2=i2.last_name_2 
AND i.street_1=i2.street_1 AND i.street_2 = i2.street_2 
where 
i2.id is null 

Es gibt auch eine einfache Möglichkeit, dies zu tun, wenn Ihre Datenbank MINUS Satz Betreiber unterstützt nur schreiben

SELECT * FROM information 
MINUS 
SELECT * FROM information_2 

und Sie erhalten die gleiche Antwort

Verwandte Themen