EEN LEFT ANTI SEMI JOIN
is een type join dat alleen die afzonderlijke rijen in de linker rijenset retourneert die geen overeenkomende rij in de rechter rijenset hebben.
Maar als u T-SQL in SQL Server gebruikt en u probeert expliciet LEFT ANTI SEMI JOIN
te gebruiken in uw zoekopdracht krijgt u waarschijnlijk de volgende foutmelding:
Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
Gelukkig bevat SQL Server de EXCEPT
operator, waarmee we een LEFT ANTI SEMI JOIN
. kunnen uitvoeren .
Wanneer u de EXCEPT
. gebruikt operator, verschijnt het in het query-uitvoeringsplan als een LEFT ANTI SEMI JOIN
.
U kunt ook een subquery maken die hetzelfde doet.
Voorbeeld
Stel je voor dat we twee tabellen hebben; Cats
en Dogs
, en we voeren dan de volgende query uit:
SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Deze zoekopdracht gebruikt de EXCEPT
operator, en het zal verschijnen als een LEFT ANTI SEMI JOIN
in het uitvoeringsplan.
Het lijkt op het volgende doen:
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Hier is het uitvoeringsplan voor die zoekopdracht:
Als u U-SQL gebruikt met Azure Data Lake Analytics, kunt u de ANTISEMIJOIN
gebruiken clausule om rechts en links anti semi-joins te doen. Dat wil zeggen, u kunt LEFT ANTISEMIJOIN
. gebruiken of RIGHT ANTISEMIJOIN
.