日期:2014-05-17  浏览次数:20798 次

请教一直困扰的问题,三张表,A Left outer joinB ……left outer join C……
A left outer join B on……left outer join C on……
这种情况,是(1)A分别与B和C左外连接,还是
            (2)A与B左外连接的结果再与C左外连接
请问是上面那种情况。
sql?

------解决方案--------------------
declare @a table( id int)
declare @b table( id int)
declare @c table( id int)

insert @a select 1 union all select 2
insert @b select 1 union all select 2
insert @c select 1 union all select 2

select * from @a a
left join @b b on a.id = b.id
left join @c c on a.id = c.id

(2)A与B左外连接的结果再与C左外连接
看下面的执行计划


------解决方案--------------------
按照T-SQL的执行顺序,会先关联前一个join中的两个表,成为一个虚拟表,然后再与后面那个join关联,一直到表全部处理完毕。

但是:由于优化器可能改变你的关联顺序,所以如何关联应该看“实际执行计划”的情况而定