En LEFT ANTI SEMI JOIN
er en type joinforbindelse, der kun returnerer de distinkte rækker i det venstre rækkesæt, der ikke har nogen matchende række i det højre rækkesæt.
Men når du bruger T-SQL i SQL Server, hvis du prøver eksplicit at bruge LEFT ANTI SEMI JOIN
i din forespørgsel, vil du sandsynligvis få følgende fejlmeddelelse:
Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
Heldigvis indeholder SQL Server koden EXCEPT
operator, som giver os mulighed for at udføre en LEFT ANTI SEMI JOIN
.
Når du bruger EXCEPT
operatør, vises den i forespørgselsudførelsesplanen som en LEFT ANTI SEMI JOIN
.
Du kan også konstruere en underforespørgsel, der gør det samme.
Eksempel
Forestil dig, at vi har to borde; Cats
og Dogs
, og vi kører derefter følgende forespørgsel:
SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Denne forespørgsel bruger EXCEPT
operatør, og den vises som en LEFT ANTI SEMI JOIN
i udførelsesplanen.
Det svarer til at gøre følgende:
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Her er udførelsesplanen for den forespørgsel:
Hvis du bruger U-SQL med Azure Data Lake Analytics, kan du bruge ANTISEMIJOIN
klausul for at gøre højre og venstre anti semi joins. Det vil sige, du kan bruge LEFT ANTISEMIJOIN
eller RIGHT ANTISEMIJOIN
.