为了账号安全,请及时绑定邮箱和手机立即绑定

sql server中left join左链接遇到的问题。

sql server中left join左链接遇到的问题。

holdtom 2018-12-07 03:36:52
语句1 select a.* from a left join b on a.id=b.id 结果470条 语句2 select a.* from a left join b on a.id=b.id and a.Name='张三' 结果445条 语句3 select a.* from a left join b on a.id=b.id where a.Name='张三' 结果1条 语句4 select a.* from a left join b on a.Name='张三' 结果603条   语句2中查出来的数据有部分的name不等于'张三' 语句2为什么会查出不等于张三的数据?原因是什么?为什么语句4会查出来601条?它默认关联的字段又是那个呢?
查看完整描述

11 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

返回的数据是a表本身,为什么呢?之前的删掉干嘛,本来还想着回复你的

查看完整回答
反对 回复 2019-01-07
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

个人建议:表连接就是表连接,搜索条件就是搜索条件。如果都这么写,那还要where子句干嘛?搜索条件还是写在where子句里面合适,你这种写法,就算知道了出错原因,也没有什么实际价值。

就事论事,不喜勿喷

 

查看完整回答
反对 回复 2019-01-07
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

执行一边,看一下执行计划就知道怎么回事

查看完整回答
反对 回复 2019-01-07
?
阿晨1998

TA贡献2037条经验 获得超6个赞

2和3的查询时等价的,你仔细检查你的查询结果,

4,笛卡尔乘积,你在on子句中写上 1=1 也行

 

查看完整回答
反对 回复 2019-01-07
?
慕标5832272

TA贡献1966条经验 获得超4个赞

23不等价,我可以确定以及肯定。内链接才会等价,我之所以贴出3是因为了说明3才是我想要的,凸显2为什么会查处来的数据不对

查看完整回答
反对 回复 2019-01-07
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

3是笛卡尔积后,重新使用where查询。如果使用的是join(内连接),才是相同的

查看完整回答
反对 回复 2019-01-07
?
青春有我

TA贡献1784条经验 获得超8个赞

我的理解:语句2的and,只有符合才会去关联b表,不符合的只返回a表本身。

查看完整回答
反对 回复 2019-01-07
  • 11 回答
  • 0 关注
  • 687 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信