首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怪:SQL理解問題:多表聯接。解决办法

2012-04-17 
怪:SQL理解問題:多表聯接。SQL codecreate table #aa (InMainID int,price int)create table #bb (InMainID

怪:SQL理解問題:多表聯接。

SQL code
create table #aa (InMainID int,price int)create table #bb (InMainID int,OutMainID int,price int)create table #cc (outMainID int)insert into #aaselect 1,10union select 2,20insert into #bbselect 1,1,50select * from #aa a    left join #bb b on a.inMainID=b.InMainID    inner join #cc c on b.OutMainID=c.OutMainIDwhere a.InMainID=1


查詢結果:
無。

以前我認為會有一條記錄。
現在也仍理解不了。
b和c先 inner join 。記錄為0
a再和結果做left 。那應該會有一條記錄啊?
為什麼會沒有

查詢計劃分析裡看。也是b和c先連,再和a連

希望得到指點。
謝謝!




[解决办法]
SQL code
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
[解决办法]
一个0记录的表,与另一个非零记录的表进行左连接,怎么能查得出东西来呢!
左连接是,取左表的记录,及右表匹配的记录.
[解决办法]
没有记录
[解决办法]
SQL code
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  --这里过滤上面的所有结果
[解决办法]
SQL code
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
[解决办法]
探讨

引用:
一个0记录的表,与另一个非零记录的表进行左连接,怎么能查得出东西来呢!
左连接是,取左表的记录,及右表匹配的记录.

a是有記錄的

[解决办法]
你也可以改成这样:

select * 
from #aa a
inner join #bb b on a.inMainID=b.InMainID
left join #cc c on b.OutMainID=c.OutMainID
where a.InMainID=1

因为前两个用内连接可以获得结果.

或者也可以说,表的连接是由连接表达式从前向后连接的,如果你这样:

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

则先左连接 aa ,bb ,由于它们有连接,因此有结果,所得连接结果与 cc 内连接,由于cc 没有记录,因此无满足连接条件的记录,所得结果也没有记录.

热点排行