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

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

Ein LEFT SEMI JOIN ist eine Art Halbverbindung. Es gibt alle unterschiedlichen Werte zurück, die sowohl von der Abfrage auf der linken als auch auf der rechten Seite der Abfrage zurückgegeben werden.

Wenn Sie jedoch bei der Verwendung von T-SQL in SQL Server versuchen, explizit LEFT SEMI JOIN zu verwenden In Ihrer Abfrage erhalten Sie wahrscheinlich die folgende Fehlermeldung:

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

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

Wenn Sie den INTERSECT verwenden -Operator, erscheint er im Abfrageausführungsplan als LEFT 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
INTERSECT
SELECT 
    DogName AS PetName
FROM Dogs;

Diese Abfrage verwendet den INTERSECT -Operator und erscheint daher als LEFT SEMI JOIN im Ausführungsplan.

Es ist ähnlich wie Folgendes:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE 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 SEMIJOIN verwenden -Klausel, um rechte und linke Semi-Joins auszuführen. Das heißt, Sie können LEFT SEMIJOIN verwenden oder RIGHT SEMIJOIN .