sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man gör en VÄNSTER ANTI SEMI JOIN i SQL Server

En LEFT ANTI SEMI JOIN är en typ av koppling som endast returnerar de distinkta raderna i den vänstra raduppsättningen som inte har någon matchande rad i den högra raduppsättningen.

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

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

Som tur är innehåller SQL Server koden EXCEPT operator, som låter oss utföra en LEFT ANTI SEMI JOIN .

När du använder EXCEPT operatör, visas den i frågeexekveringsplanen som en LEFT ANTI 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
EXCEPT
SELECT 
    DogName AS PetName
FROM Dogs;

Den här frågan använder EXCEPT operator, och den kommer att visas som en LEFT ANTI SEMI JOIN i genomförandeplanen.

Det liknar att göra följande:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE NOT 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 ANTISEMIJOIN klausul för att göra höger och vänster anti semi joins. Det vill säga, du kan använda LEFT ANTISEMIJOIN eller RIGHT ANTISEMIJOIN .


  1. Dataintegritet och prestandaöverväganden i MySQL semisynkron replikering

  2. Konvertera siffror/siffror i ord för INR-valuta (indiska rupier) i Oracle PL/SQL

  3. Få ID för den infogade raden med C#

  4. Enradsfunktioner i Oracle sql