sql >> Database >  >> RDS >> Sqlserver

Een LINKER SEMI JOIN doen in SQL Server

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 .


  1. 5 banen waarvoor Microsoft-toegang is vereist

  2. UPDATE-instructie in Oracle met SQL of PL/SQL om ALLEEN de eerste dubbele rij bij te werken

  3. Haal de dagnaam uit een datum in PostgreSQL

  4. Prestatieverschil:voorwaarde geplaatst bij INNER JOIN vs WHERE-clausule