sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man gör en LEFT SEMI JOIN i SQL Server

En LEFT SEMI JOIN är typ en halv-join. Den returnerar alla distinkta värden som returneras av både frågan på vänster och höger sida av frågan.

Men när du använder T-SQL i SQL Server, om du försöker uttryckligen använda LEFT SEMI JOIN i din fråga kommer du förmodligen att få följande felmeddelande:

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

Lyckligtvis innehåller T-SQL INTERSECT operator, som låter oss utföra en LEFT SEMI JOIN .

När du använder INTERSECT operatör, visas den i frågeexekveringsplanen som en LEFT SEMI JOIN .

Du kan också konstruera en underfråga som gör samma sak.

Exempel

Föreställ dig att vi har två bord; Cats och Dogs , och vi kör sedan följande fråga:

SELECT 
    CatName AS PetName
FROM Cats
INTERSECT
SELECT 
    DogName AS PetName
FROM Dogs;

Den här frågan använder INTERSECT operatorn, och den kommer därför att visas som en LEFT SEMI JOIN i genomförandeplanen.

Det liknar att göra följande:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Här är exekveringsplanen för den frågan:

Om du använder U-SQL med Azure Data Lake Analytics kan du använda SEMIJOIN klausul för att göra höger och vänster semi joins. Det vill säga, du kan använda LEFT SEMIJOIN eller RIGHT SEMIJOIN .


  1. De 10 bästa anledningarna till att använda Access och Excel tillsammans

  2. sql grupp efter kontra distinkt

  3. Ansluter FlySpeed ​​SQL Query till Salesforce.com

  4. Hur man installerar MySQL på macOS