• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

want to much

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

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

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后面的条件不能随便加。。。。

 

应该是这些数据,多出来了,on其实对主表也是有作用的,但是的话字段连接不上的话筛选条件就没有作用了。

这样结果就一目了然了,1946-1816就是找不到的130条数据。

posted on 2020-11-26 16:38  liguangzhu  阅读(397)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3