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

Защо редът на клаузите за присъединяване влияе върху плана на заявката в SQL Server?

Трябва да не се съглася с всички предишни отговори и причината е проста:ако промените реда на вашето ляво съединение, вашите заявки са логически различни и като такива те произвеждат различни набори от резултати. Вижте сами:

SELECT 1 AS a INTO #t1
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4;

SELECT 1 AS b INTO #t2
UNION ALL SELECT 2;

SELECT 1 AS c INTO #t3
UNION ALL SELECT 3;

SELECT a, b, c 
FROM #t1 LEFT JOIN #t2 ON #t1.a=#t2.b
  LEFT JOIN #t3 ON #t2.b=#t3.c
ORDER BY a;

SELECT a, b, c 
FROM #t1 LEFT JOIN #t3 ON #t1.a=#t3.c
  LEFT JOIN #t2 ON #t3.c=#t2.b
ORDER BY a;

a           b           c
----------- ----------- -----------
1           1           1
2           2           NULL
3           NULL        NULL
4           NULL        NULL

(4 row(s) affected)

a           b           c
----------- ----------- -----------
1           1           1
2           NULL        NULL
3           NULL        3
4           NULL        NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Можем ли да се върнем към първоначалното състояние, след като сме използвали DBCC CHECKIDENT за рестартиране на броя на колоните за самоличност?

  2. SQL Server Възникна невалидна операция с плаваща запетая

  3. Как мога да извлека последните 12 месеца от текущата дата ПЛЮС допълнителни дни до 1-во число на последния месец

  4. Преобразувайте редовете в колони с помощта на „Pivot“ в SQL Server

  5. Как да предотвратите вмъкването на дублиращи се записи с SqlBulkCopy, когато няма първичен ключ