sql >> Database >  >> RDS >> Sqlserver

Een LINKER ANTI SEMI JOIN doen in SQL Server

EEN LEFT ANTI SEMI JOIN is een type join dat alleen die afzonderlijke rijen in de linker rijenset retourneert die geen overeenkomende rij in de rechter rijenset hebben.

Maar als u T-SQL in SQL Server gebruikt en u probeert expliciet LEFT ANTI SEMI JOIN te gebruiken in uw zoekopdracht krijgt u waarschijnlijk de volgende foutmelding:

Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.

Gelukkig bevat SQL Server de EXCEPT operator, waarmee we een LEFT ANTI SEMI JOIN . kunnen uitvoeren .

Wanneer u de EXCEPT . gebruikt operator, verschijnt het in het query-uitvoeringsplan als een LEFT ANTI 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
EXCEPT
SELECT 
    DogName AS PetName
FROM Dogs;

Deze zoekopdracht gebruikt de EXCEPT operator, en het zal verschijnen als een LEFT ANTI SEMI JOIN in het uitvoeringsplan.

Het lijkt op het volgende doen:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE NOT 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 ANTISEMIJOIN gebruiken clausule om rechts en links anti semi-joins te doen. Dat wil zeggen, u kunt LEFT ANTISEMIJOIN . gebruiken of RIGHT ANTISEMIJOIN .


  1. SQLite LIKE

  2. Room DB gebruiken in bibliotheekproject

  3. Hoe twee kolommengegevens in A, B-indeling in Oracle op te halen

  4. ORA-21700:object bestaat niet of is gemarkeerd voor verwijdering voor Associative Array als invoerparameter aangeroepen vanuit ODP.NET