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 .