sql >> Databáze >  >> RDS >> Sqlserver

Jak provést LEVÝ ANTI SEMI JOIN v SQL Server

LEFT ANTI SEMI JOIN je typ spojení, které vrací pouze ty odlišné řádky v levé sadě řádků, které nemají žádný odpovídající řádek v pravé sadě řádků.

Ale když používáte T-SQL na SQL Server, pokud se pokusíte explicitně použít LEFT ANTI SEMI JOIN ve vašem dotazu pravděpodobně dostanete následující chybu:

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

Naštěstí SQL Server obsahuje EXCEPT operátor, který nám umožňuje provést LEFT ANTI SEMI JOIN .

Když použijete EXCEPT operátor, objeví se v plánu provádění dotazu jako LEFT ANTI SEMI JOIN .

Můžete také vytvořit poddotaz, který dělá totéž.

Příklad

Představte si, že máme dva stoly; Cats a Dogs a poté spustíme následující dotaz:

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

Tento dotaz používá EXCEPT operátor a zobrazí se jako LEFT ANTI SEMI JOIN v prováděcím plánu.

Je to podobné, jako když uděláte následující:

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

Zde je plán provedení pro tento dotaz:

Pokud používáte U-SQL s Azure Data Lake Analytics, můžete použít ANTISEMIJOIN klauzule udělat pravý a levý anti semi spoj. To znamená, že můžete použít LEFT ANTISEMIJOIN nebo RIGHT ANTISEMIJOIN .


  1. Skupiny konverzace SQL Server Service Broker

  2. Jak vypočítat celkový prodej za měsíc v MySQL?

  3. Přehled příkazu T-SQL PRINT

  4. Jak formátovat datum a čas na serveru SQL Server