sql >> Database >  >> RDS >> Sqlserver

Waarom is de volgorde van join-clausules van invloed op het queryplan in SQL Server?

Ik ben het niet eens met alle eerdere antwoorden, en de reden is simpel:als je de volgorde van je linker join verandert, zijn je queries logisch verschillend en als zodanig produceren ze verschillende resultatensets. Overtuig uzelf:

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. Is er een verschijnt in alle (set divisie?) operatie ingebouwd in MySQL?

  2. De EXECUTE-toestemming is geweigerd voor het object 'xxxxxxx', database 'zzzzzzz', schema 'dbo'

  3. Fout bij het hernoemen van kolommen met spatie in Oracle-tabel. Fout - SQL-fout:ORA- 00946:zoekwoord TO ontbreekt

  4. Het voorkomen van een drop-table bij het doelschema in Oracle Streams