★★★★ 查询条件 放在 join on 里和 where 里的区别

hangzhou_hammer 2008-03-21 09:50:16
select * from a inner join b on a.id=b.aid where b.nameid=9

select * from a inner join b on (a.id=b.aid and b.nameid=9)
得到的 结果 居然 不一样……
实际只有下面的语句才有用;
真不知道为什么……
...全文
95 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hangzhou_hammer 2008-04-07
不好意思,这个结果应该是一样的…… 是我后面的条件 有问题;引起骚乱了…… 真是不好意思啊~`
回复
tjhdaxia 2008-03-25
select * from a inner join b on a.id=b.aid where b.nameid=9

select * from a inner join b on (a.id=b.aid and b.nameid=9)

结果是有可能不一样的。

解释
第1条SQL语句是 on a.id=b.aid 这里已经是经过where b.nameid=9 筛选之后的第二次筛选了。
第2条SQL语金是 on (a.id=b.aid and b.nameid=9) 同时在完全连接的情况下进行筛选而a表并没有被筛选。
回复
忆轩辕 2008-03-25
感觉应该是一样的。。。。。。。。。
回复
henreash 2008-03-25
关注
回复
cxmcxm 2008-03-22
内连接应该是相同的吧,左或右连接可能不同
回复
wumg 2008-03-22
select * from a,b where a.id=b.aid and b.nameid=9

应该一样吧?
回复
Lyw110 2008-03-22
关注中,给些数据了,个人觉得这里好象先筛选再连接,跟先连接后筛选都一样吧
回复
hui_hui_2007 2008-03-22
楼主可否给一个测试数据,我也认为,结果应该是一样的。
只是第一种写法更规范。
回复
RoverX 2008-03-22
关注!!!
回复
山之魂2 2008-03-21
顶一个
回复
hui_hui_2007 2008-03-21
第一种写法对.先连接,然后where
第二种不好.逻辑不清.
回复
ziping 2008-03-21
前一个是连接得出数据后再筛选,后一个是连接的时候就筛选
回复
xlongbuilder 2008-03-21
关注。。。。。。
回复
henreash 2008-03-21
应该是先join后筛选先筛选后join的区别吧
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-21 09:50
社区公告
暂无公告