Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да направите ЛЯВО ANTI SEMI JOIN в SQL Server

A LEFT ANTI SEMI JOIN е тип присъединяване, което връща само онези отделни редове в левия набор от редове, които нямат съвпадащ ред в десния набор от редове.

Но когато използвате T-SQL в SQL Server, ако се опитате изрично да използвате LEFT ANTI SEMI JOIN във вашата заявка вероятно ще получите следната грешка:

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

За щастие SQL Server включва EXCEPT оператор, който ни позволява да извършим LEFT ANTI SEMI JOIN .

Когато използвате EXCEPT оператор, той се появява в плана за изпълнение на заявката като LEFT ANTI SEMI JOIN .

Можете също така да създадете подзаявка, която прави същото.

Пример

Представете си, че имаме две маси; Cats и Dogs и след това изпълняваме следната заявка:

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

Тази заявка използва EXCEPT оператор и ще се появи като LEFT ANTI SEMI JOIN в плана за изпълнение.

Това е подобно на това да направите следното:

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

Ето плана за изпълнение на тази заявка:

Ако използвате U-SQL с Azure Data Lake Analytics, можете да използвате ANTISEMIJOIN клауза за извършване на дясно и ляво анти полусъединяване. Това означава, че можете да използвате LEFT ANTISEMIJOIN или 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 работи понякога

  2. SQL Server 2008:как да дам привилегии на потребителско име?

  3. SQL Server и уязвимостите Spectre/Meltdown

  4. Получавате най-близката дължина и ширина от таблицата на базата данни на MSSQL?

  5. Скрити подобрения в производителността и управляемостта в SQL Server 2012 / 2014