请教一直困扰的问题,三张表,A Left outer joinB ……left outer join C……

jinianjun 2013-05-31 10:53:29
A left outer join B on……left outer join C on……
这种情况,是(1)A分别与B和C左外连接,还是
(2)A与B左外连接的结果再与C左外连接
请问是上面那种情况。
...全文
726 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xg1103 2013-06-03
  • 打赏
  • 举报
回复
用脚指头想也是2嘛.只有这样才是最合理和有效率的,微软的工程师肯定会这样安排.
發糞塗牆 2013-06-03
  • 打赏
  • 举报
回复
按照T-SQL的执行顺序,会先关联前一个join中的两个表,成为一个虚拟表,然后再与后面那个join关联,一直到表全部处理完毕。 但是:由于优化器可能改变你的关联顺序,所以如何关联应该看“实际执行计划”的情况而定
jinianjun 2013-06-03
  • 打赏
  • 举报
回复
引用 1 楼 tntzbzc 的回复:
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左外连接 看下面的执行计划
感谢大师的回复!!!
mycodeis0000 2013-06-02
  • 打赏
  • 举报
回复
一直看不太懂SQLServer的执行计划 今天这个貌似懂了一点点了
铁歌 2013-06-02
  • 打赏
  • 举报
回复
楼上贴出的执行图清晰了,a和B 作nested loop 后来 再和C 作nested loop
sqlkxr 2013-06-02
  • 打赏
  • 举报
回复
反正就是一个临时结果集的概念。
linwaterbin 2013-06-01
  • 打赏
  • 举报
回复
引用 1 楼 tntzbzc 的回复:
大湿的敬业令我辈汗颜!
任何RDBMS、每次连接、优化器只能先2表
tcmakebest 2013-06-01
  • 打赏
  • 举报
回复
你说的两种结果没有什么区别啊,不需要纠结,
撸大湿 2013-05-31
  • 打赏
  • 举报
回复
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左外连接
看下面的执行计划

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧