EEN LEFT SEMI JOIN
is een soort half-join. Het retourneert alle afzonderlijke waarden die worden geretourneerd door zowel de zoekopdracht aan de linker- als rechterkant van de zoekopdracht.
Als u echter T-SQL in SQL Server gebruikt en u probeert expliciet LEFT SEMI JOIN
te gebruiken in uw zoekopdracht krijgt u waarschijnlijk de volgende foutmelding:
Msg 155, Level 15, State 1, Line 4
'SEMI' is not a recognized join option.
Gelukkig bevat T-SQL de INTERSECT
operator, waarmee we een LEFT SEMI JOIN
. kunnen uitvoeren .
Wanneer u de INTERSECT
. gebruikt operator, verschijnt het in het uitvoeringsplan van de query als een LEFT 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
INTERSECT
SELECT
DogName AS PetName
FROM Dogs;
Deze zoekopdracht gebruikt de INTERSECT
operator, en het zal daarom verschijnen als een LEFT SEMI JOIN
in het uitvoeringsplan.
Het lijkt op het volgende doen:
SELECT
DISTINCT CatName
FROM Cats c
WHERE 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 SEMIJOIN
gebruiken clausule om rechts en links semi-joins te doen. Dat wil zeggen, u kunt LEFT SEMIJOIN
. gebruiken of RIGHT SEMIJOIN
.