sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan laver du en LEFT ANTI SEMI JOIN i SQL Server

En LEFT ANTI SEMI JOIN er en type joinforbindelse, der kun returnerer de distinkte rækker i det venstre rækkesæt, der ikke har nogen matchende række i det højre rækkesæt.

Men når du bruger T-SQL i SQL Server, hvis du prøver eksplicit at bruge LEFT ANTI SEMI JOIN i din forespørgsel, vil du sandsynligvis få følgende fejlmeddelelse:

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

Heldigvis indeholder SQL Server koden EXCEPT operator, som giver os mulighed for at udføre en LEFT ANTI SEMI JOIN .

Når du bruger EXCEPT operatør, vises den i forespørgselsudførelsesplanen som en LEFT ANTI 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
EXCEPT
SELECT 
    DogName AS PetName
FROM Dogs;

Denne forespørgsel bruger EXCEPT operatør, og den vises som en LEFT ANTI SEMI JOIN i udførelsesplanen.

Det svarer til at gøre følgende:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE NOT 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 ANTISEMIJOIN klausul for at gøre højre og venstre anti semi joins. Det vil sige, du kan bruge LEFT ANTISEMIJOIN eller RIGHT ANTISEMIJOIN .


  1. SQL, Unikke og Primære nøgler

  2. Sådan finder du de sorteringer, der understøttes af serveren i MySQL

  3. Opdater en databasepostkonto (SSMS)

  4. Returner en liste over tabeller og visninger i SQL Server ved hjælp af T-SQL (sp_tables)