En LEFT SEMI JOIN
er en slags halv-join. Det returnerer alle distinkte værdier, der returneres af både forespørgslen på venstre og højre side af forespørgslen.
Men når du bruger T-SQL i SQL Server, hvis du prøver eksplicit at bruge LEFT SEMI JOIN
i din forespørgsel, vil du sandsynligvis få følgende fejlmeddelelse:
Msg 155, Level 15, State 1, Line 4
'SEMI' is not a recognized join option.
Heldigvis inkluderer T-SQL INTERSECT
operator, som giver os mulighed for at udføre en LEFT SEMI JOIN
.
Når du bruger INTERSECT
operatør, vises den i forespørgselsudførelsesplanen som en LEFT 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
INTERSECT
SELECT
DogName AS PetName
FROM Dogs;
Denne forespørgsel bruger INTERSECT
operator, og den vil derfor fremstå som en LEFT SEMI JOIN
i udførelsesplanen.
Det svarer til at gøre følgende:
SELECT
DISTINCT CatName
FROM Cats c
WHERE 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 SEMIJOIN
klausul for at gøre højre og venstre semi joins. Det vil sige, du kan bruge LEFT SEMIJOIN
eller RIGHT SEMIJOIN
.