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 .