今天问了一圈白痴问题,但因为脑子笨、反应慢,所以把大家的解答都记下来,以备以后常忘常查。
问题:
select * from A left join f on e.cust=f.account_id
where f.status='0'
与
select * from A left join f
on e.cust=f.account_id and f.status='0'
的区别
大家回复:
沈阳-佚名(280829721) 18:06:39
在做外连查询的时候ON里面的条件是在外连执行之前筛选的的
上海-芨芨草(29710632) 18:07:52
where的呢?
沈阳-佚名(280829721) 18:08:18
外联之后
深圳-魔羯飞舞(5768534) 18:08:38
连接之后在按WHERE
上海-芨芨草(29710632) 18:09:45
但都会过滤掉的是吧,结果集应该是一样的吧?
沈阳-佚名(280829721) 18:09:53
不一样
深圳-魔羯飞舞(5768534) 18:12:41
left join f on e.cust=f.account_id where f.status='0'
left join f on e.cust=f.account_id and f.status='0‘
看你需要用咯
深圳-魔羯飞舞(5768534) 18:13:09
上面哪个是你左联后!再选出f.status='0'的
深圳-魔羯飞舞(5768534) 18:19:38
WHERE哪个说白了就是连主表都砍掉的
280829721 18:18:22
on 里的条件是先执行的
280829721 18:19:15
如果是where 的话,等于在两个表连接 了以后 再去 做过滤
佚名 18:20:21
如果是and ,就可以认为是on的条件先执行
佚名 18:20:30
不用在连接之后再去过滤
佚名 18:20:34
我是这么理解的
O(281349520) 18:13:16
To:芨芨草
可以肯定的告诉你,这两个语句绝对有分别,结果集绝对不一样。
O(281349520) 18:13:43
left join f on e.cust=f.account_id where f.status='0'
结果集里只存在f.status='0'的结果
O(281349520) 18:14:47
left join f on e.cust=f.account_id and f.status='0'
这个语句会把两个表的数据都列出来
O(281349520) 18:15:17
不过f这个表的数据并不会全部列出,只会列出f表的 f.status='0' 的数据
谢谢大家对我的帮助!