首页 > 其他 > 详细

数据表外连接提前子查询筛选条件和最后where筛选条件区别

时间:2020-11-26 18:17:06      阅读:60      评论:0      收藏:0      [点我收藏+]

如果是左连接的情况下对右表进行限

select wr.id,wr.merchant_id,wm.merchant_id,wm.id,wr.wechat_id,wm.wechat_id,wm.belong from wechat_report wr 
left join (select * from wechat_merchant where belong = 3) wm
on wr.wechat_id = wm.wechat_id
order by wm.wechat_id;

select wr.id,wr.merchant_id,wm.merchant_id,wm.id,wr.wechat_id,wm.wechat_id,wm.belong from wechat_report wr 
left join wechat_merchant wm
on wr.wechat_id = wm.wechat_id
where wm.belong = 3
order by wm.wechat_id  

查询出来的结果:

技术分享图片技术分享图片

结果完全不一样,我想,这是因为第一条sql语句提前对右表限制了数据,而对左表其实就是主表的数据没有影响。相当于在建立临时表里面的on,虽然结果一样,效率却大相庭径。

技术分享图片技术分享图片

[SQL] select wr.id,wr.merchant_id,wm.merchant_id,wm.id,wr.wechat_id,wm.wechat_id,wm.belong from wechat_report wr 
right join wechat_merchant wm
on wr.wechat_id = wm.wechat_id and wm.belong = 3
order by wm.wechat_id;
受影响的行: 0
时间: 78.559s

[SQL] 

select wr.id,wr.merchant_id,wm.merchant_id,wm.id,wr.wechat_id,wm.wechat_id,wm.belong from wechat_report wr 
right join wechat_merchant wm
on wr.wechat_id = wm.wechat_id
where wm.belong = 3
order by wm.wechat_id;
受影响的行: 0
时间: 5.681s

  技术分享图片技术分享图片

跟我想的不一样了。。。太尴尬了,结果不同了,是这些数据多了

技术分享图片

然后再稍微修改一下子。

select wr.id,wr.merchant_id,wm.merchant_id,wm.id,wr.wechat_id,wm.wechat_id,wm.belong from wechat_report wr 
right join (select * from wechat_merchant where belong = 3) wm
on wr.wechat_id = wm.wechat_id
order by wm.wechat_id;

 得出结果:

技术分享图片

看来on后面的条件不能随便加。。。。

数据表外连接提前子查询筛选条件和最后where筛选条件区别

原文:https://www.cnblogs.com/learnerlx/p/14043045.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!