怪:SQL理解問題:多表聯接。
时间:2011-12-07
来源:互联网
create table #aa (InMainID int,price int) create table #bb (InMainID int,OutMainID int,price int) create table #cc (outMainID int) insert into #aa select 1,10 union select 2,20 insert into #bb select 1,1,50 select * from #aa a left join #bb b on a.inMainID=b.InMainID inner join #cc c on b.OutMainID=c.OutMainID where a.InMainID=1
查詢結果:
無。
以前我認為會有一條記錄。
現在也仍理解不了。
b和c先 inner join 。記錄為0
a再和結果做left 。那應該會有一條記錄啊?
為什麼會沒有
查詢計劃分析裡看。也是b和c先連,再和a連
希望得到指點。
謝謝!
作者: MasterLonely 发布时间: 2011-12-07
左连接是,取左表的记录,及右表匹配的记录.
作者: qianjin036a 发布时间: 2011-12-07
作者: ssp2009 发布时间: 2011-12-07
select * from #aa a left join #bb b on a.inMainID=b.InMainID --先执行left join inner join #cc c on b.OutMainID=c.OutMainID --上面步骤过滤出来的数据与c inner join where a.InMainID=1 --这里过滤上面的所有结果
作者: fredrickhu 发布时间: 2011-12-07
select * from #aa a left join #bb b on a.inMainID=b.InMainID --a 和b 先做left join ,有一行记录 inmainid = 1的 inner join #cc c on b.OutMainID=c.OutMainID --b 和c 再做inner join,c中无数据,所以出来就是没有一行满足 where a.InMainID=1
作者: OrchidCat 发布时间: 2011-12-07
(小F) 和 (【来者】) 說得很詳細。和結果能對得上。
但我還有二個疑問:
1 查看計劃:
SQL code
|--Nested Loops(Inner Join) |--Hash Match(Inner Join, HASH:([c].[outMainID])=([b].[OutMainID]), RESIDUAL:([b].[OutMainID]=[c].[outMainID])) | |--Table Scan(OBJECT:([tempdb].[dbo].[#cc_________________________________________________________________________________________________________________000000020BA9] AS [c])) | |--Table Scan(OBJECT:([tempdb].[dbo].[#bb_________________________________________________________________________________________________________________000000020BA9] AS [b]), WHERE:([b].[InMainID]=1)) |--Table Scan(OBJECT:([tempdb].[dbo].[#aa_________________________________________________________________________________________________________________000000020BA9] AS [a]), WHERE:([a].[InMainID]=1))
會發現,是b,c先處理,再處理 a
2.處理順序怎麼判斷?
謝謝大家
作者: MasterLonely 发布时间: 2011-12-07
一个0记录的表,与另一个非零记录的表进行左连接,怎么能查得出东西来呢!
左连接是,取左表的记录,及右表匹配的记录.
a是有記錄的
作者: MasterLonely 发布时间: 2011-12-07
作者: MasterLonely 发布时间: 2011-12-08
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28