En LEFT SEMI JOIN
är typ en halv-join. Den returnerar alla distinkta värden som returneras av både frågan på vänster och höger sida av frågan.
Men när du använder T-SQL i SQL Server, om du försöker uttryckligen använda LEFT SEMI JOIN
i din fråga kommer du förmodligen att få följande felmeddelande:
Msg 155, Level 15, State 1, Line 4
'SEMI' is not a recognized join option.
Lyckligtvis innehåller T-SQL INTERSECT
operator, som låter oss utföra en LEFT SEMI JOIN
.
När du använder INTERSECT
operatör, visas den i frågeexekveringsplanen som en LEFT SEMI JOIN
.
Du kan också konstruera en underfråga som gör samma sak.
Exempel
Föreställ dig att vi har två bord; Cats
och Dogs
, och vi kör sedan följande fråga:
SELECT
CatName AS PetName
FROM Cats
INTERSECT
SELECT
DogName AS PetName
FROM Dogs;
Den här frågan använder INTERSECT
operatorn, och den kommer därför att visas som en LEFT SEMI JOIN
i genomförandeplanen.
Det liknar att göra följande:
SELECT
DISTINCT CatName
FROM Cats c
WHERE EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Här är exekveringsplanen för den frågan:
Om du använder U-SQL med Azure Data Lake Analytics kan du använda SEMIJOIN
klausul för att göra höger och vänster semi joins. Det vill säga, du kan använda LEFT SEMIJOIN
eller RIGHT SEMIJOIN
.