2016-07-27 12 views
0

Ich habe eine SQL Server-Abfrage für eine innere Verknüpfung ...Suche nach allen Datensätzen, die sich NICHT am inneren Join zweier Tabellen anschließen?

SELECT * 
FROM tableA 
INNER JOIN tableB on tableA.my_id = tableB.my_id 

Wie würde ich alle Datensätze, die kommen sich nicht in dieses Spiel?

+0

Aus welcher Tabelle sollen die Datensätze erstellt werden? – kicken

+0

Ich möchte Datensätze aus beiden Tabellen, die nicht übereinstimmen. (Ich bin sehr neu in MSSQL). – a1234

Antwort

3

Sie (my_id von tableA SELECT) verwenden können, Kombinieren Sie die beiden Tabellen, und verwenden Sie dann eine WHERE-Klausel, um die Ergebnisse auf nur nicht übereinstimmende Zeilen herunterzufiltern, indem Sie in jedem Primärschlüsselwert der Tabellen nach einem NULL-Wert suchen.

Volle äußere Verknüpfung Alle Zeilen in allen verknüpften Tabellen enthalten sind, ob sie übereinstimmen oder nicht.

SELECT a.pk, b.pk 
FROM tableA a 
FULL JOIN tableB b ON a.pk=b.fk 
WHERE 
    a.pk IS NULL 
    OR b.pk IS NULL 
+0

Arbeitete, danke! – a1234

0
SELECT A2.* FROM TableA A2 
       WHERE A2.my_id NOT IN 
         (Select tableA.my_id FROM 
            tableA 
            inner join 
            tableB 
            on tableA.my_id = tableB.my_id) 

Sie könnten in ähnlicher Weise die oben tun SELECT B2.* FROM TableB B2 starten, um separat zu unübertroffenen Datensätze in Tabelle B Abfrage

  • , wenn Sie alle Datensätze in einer Tabelle wollen könnten Sie UNION ALL die beiden Abfragen, je nach Die Tabellenfeldstrukturen sind gleich oder wie Sie die Felder angeben, die Sie auswählen - was machen Sie mit den Daten? eine FULL JOIN zu
0

SELECT * FROM tableA wo MY_ID NOT IN (SELECT my_id von tableB)
UNION ALL
SELECT * FROM tableB wo MY_ID NICHT IN