2017-07-11 8 views
1

Es gibt zwei Tabellen tabelle1 und table2 ich diese Tabellen verknüpfen wollen und erwarten Zeilen abzurufen, die zu tabelle1 nicht gleich sind, wie es Zeilen, die in den beiden Tabellen sind.SQL-Abfrage nicht gleich Reihen

Table1

ID NAME Dept 
1 B  Finance 
2 R  HR 
3 B  CDU 

Table2

ID PASSPORT 
1 Yes 
2 No 

es nicht

funktioniert
SELECT table1.ID, table1.NAME, table1.Dept FROM TABLE1 INNER JOIN TABLE2 ON 
TABLE1.ID != TABLE2.ID 

Erwartetes Ergebnis

ID NAME DEPT 
    3  B  CDU 
+1

Dank gerade bearbeitet –

+0

Zeigen Sie Ihre erwartete Ergebnis – JYoThI

+0

ok lassen Sie mich bearbeiten –

Antwort

4

Verwenden Sie einen LEFT JOIN und wo Klausel, um die Werte zu greifen, die nur in sind tabelle1

select 
    table1.id, 
    table1.name, 
    table1.Dept 
from 
    table1 
    left join table2 on table2.id = table1.id 
where 
    table2.id is NULL; 

Ausgang für die obige Abfrage:

output

Ein linker Join fügt einen Nullwert ein, wenn der Datensatz aus der zweiten Tabelle nicht gefunden werden kann. Fügen Sie also die where-Klausel hinzu, um alle Ergebnisse zu erfassen, die in der zweiten Tabelle nicht gefunden wurden.

Hier ist eine bessere Beschreibung der Verwendung eines left joinhttps://www.w3schools.com/sql/sql_join_left.asp

+0

es wird nicht funktionieren coz wird es alle linken Tabellenzeilen in Tabelle1 zeigen, überprüfen Sie bitte mein erwartetes Ergebnis –

+0

Nein sollte es funktionieren. Ich schreibe SQL für eine Weile, es bekommt, was Sie wollen, fügen Sie einfach in den Spalten, die Sie interessieren. – Adam

+0

Lassen Sie mich es erneut versuchen –

1

Diese Abfrage -

SELECT ID 
    ,NAME 
    ,Dept 
FROM TABLE1 
WHERE ID NOT IN (
     SELECT DISTINCT ID 
     FROM Table2 
     WHERE ID IS NOT NULL 
     ); 
+0

' WHERE ID NOT NULL' ist unnötig, da es wahrscheinlich ist, dass 'ID' ein Primärschlüssel ist und immer einen Wert haben würde. – Adam

+0

Ja. Ich wusste nichts davon, also habe ich mich darum gekümmert, indem ich es hinzugefügt habe. –

+0

@Adam - Es wird benötigt 'NOT IN' wird fehlschlagen, wenn' sub-query' einen 'NULL' Wert zurückgibt ... zumindest in' Sql Server' –