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

Dlaczego kolejność klauzul sprzężenia wpływa na plan kwerend w programie SQL Server?

Nie zgadzam się ze wszystkimi poprzednimi odpowiedziami, a powód jest prosty:jeśli zmienisz kolejność lewego sprzężenia, twoje zapytania są logicznie różne i jako takie generują różne zestawy wyników. Przekonaj się sam:

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. Błąd instalacji SQL Server 2008:Poprzednie wersje Microsoft Visual Studio 2008

  2. Jak uzyskać listę dat rozpoczęcia tygodnia (poniedziałek) i daty zakończenia (niedziela) między dwiema datami?

  3. Utwórz tabelę tymczasową na podstawie innej tabeli w SQL Server

  4. Usuń pojedynczy znak z pola varchar SQL Server 2008

  5. Rejestruj czasy rozpoczęcia i zakończenia zmian stanu pola