Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wykonać LEFT ANTI SEMI JOIN w SQL Server

LEFT ANTI SEMI JOIN to typ sprzężenia, który zwraca tylko te odrębne wiersze w lewym zestawie wierszy, które nie mają pasującego wiersza w prawym zestawie wierszy.

Ale podczas używania T-SQL w SQL Server, jeśli spróbujesz jawnie użyć LEFT ANTI SEMI JOIN w zapytaniu prawdopodobnie otrzymasz następujący błąd:

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

Na szczęście SQL Server zawiera EXCEPT operator, który pozwala nam wykonać LEFT ANTI SEMI JOIN .

Kiedy używasz EXCEPT operator, pojawia się w planie wykonania zapytania jako LEFT ANTI SEMI JOIN .

Możesz także skonstruować podzapytanie, które robi to samo.

Przykład

Wyobraź sobie, że mamy dwa stoły; Cats i Dogs , a następnie uruchamiamy następujące zapytanie:

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

To zapytanie używa EXCEPT operatora i pojawi się jako LEFT ANTI SEMI JOIN w planie wykonawczym.

Jest to podobne do wykonywania następujących czynności:

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

Oto plan wykonania tego zapytania:

Jeśli używasz języka U-SQL z usługą Azure Data Lake Analytics, możesz użyć ANTISEMIJOIN klauzula wykonywania prawych i lewych sprzężeń anty semi. Oznacza to, że możesz użyć LEFT ANTISEMIJOIN lub RIGHT ANTISEMIJOIN .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server INFORMATION_SCHEMA Widoki | Sprawdź, czy stół istnieje

  2. 9 najważniejszych wskazówek dotyczących konfiguracji klastra SQL Server

  3. Jak wygenerować skrypt, aby włączyć wszystkie ograniczenia kluczy obcych w bazie danych programu SQL Server — samouczek programu SQL Server/TSQL, część 78

  4. Obniż koszty licencjonowania SQL Server

  5. Jak utworzyć zapytanie przestawne na serwerze sql bez funkcji agregującej