Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So führen Sie einen LEFT ANTI SEMI JOIN in SQL Server aus

Ein LEFT ANTI SEMI JOIN ist ein Join-Typ, der nur die unterschiedlichen Zeilen im linken Rowset zurückgibt, die keine übereinstimmende Zeile im rechten Rowset haben.

Aber wenn Sie T-SQL in SQL Server verwenden, wenn Sie versuchen, explizit LEFT ANTI SEMI JOIN zu verwenden In Ihrer Abfrage erhalten Sie wahrscheinlich die folgende Fehlermeldung:

Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.

Glücklicherweise enthält SQL Server den EXCEPT -Operator, mit dem wir einen LEFT ANTI SEMI JOIN ausführen können .

Wenn Sie den EXCEPT verwenden -Operator erscheint er im Abfrageausführungsplan als LEFT ANTI SEMI JOIN .

Sie können auch eine Unterabfrage erstellen, die dasselbe tut.

Beispiel

Stellen Sie sich vor, wir haben zwei Tabellen; Cats und Dogs , und wir führen dann die folgende Abfrage aus:

SELECT 
    CatName AS PetName
FROM Cats
EXCEPT
SELECT 
    DogName AS PetName
FROM Dogs;

Diese Abfrage verwendet den EXCEPT -Operator und wird als LEFT ANTI SEMI JOIN angezeigt im Ausführungsplan.

Es ist ähnlich wie Folgendes:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Hier ist der Ausführungsplan für diese Abfrage:

Wenn Sie U-SQL mit Azure Data Lake Analytics verwenden, können Sie den ANTISEMIJOIN verwenden Klausel für rechte und linke Anti-Semi-Joins. Das heißt, Sie können LEFT ANTISEMIJOIN verwenden oder RIGHT ANTISEMIJOIN .