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

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

En LEFT SEMI JOIN er en slags halv-join. Det returnerer alle distinkte værdier, der returneres af både forespørgslen på venstre og højre side af forespørgslen.

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

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

Heldigvis inkluderer T-SQL INTERSECT operator, som giver os mulighed for at udføre en LEFT SEMI JOIN .

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

Denne forespørgsel bruger INTERSECT operator, og den vil derfor fremstå som en LEFT SEMI JOIN i udførelsesplanen.

Det svarer til at gøre følgende:

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


  1. Tilføj en tidszoneforskydning til en datetime2-værdi i SQL Server (T-SQL)

  2. Nulstil PostgreSQL primærnøgle til 1

  3. Forskellen i måneder mellem datoer i MySQL

  4. Er der nogen, der ved, hvilken krypteringsteknik JDeveloper/SQL Developer bruger til at bevare legitimationsoplysninger?