join in where

这也不是我第一次接触和使用sql 的 join in了,之前写的join in 的where条件从没有考虑过先join还是先where,因为我觉得除了先用where比较优化外,这两者的结果是一样的。以前没有遇到问题,但是现在问题却出现了先join还是先where上,事实证明我是错的,为了告诫大家,以此博客献给SQL入门的小伙伴。
我写的两句SQL
1. 先where 后join

select count(1)
from (select accountsid from ccp_account_test1  where end_day='2100-12-31') a 
left join 
(select accountsid from total_ccp_account2 where day='2016-12-19') b on a.accountsid=b.accountsid 
where b.accountsid is null;

2.先join后where

select count(1) from ccp_account_test1 a 
left join 
total_ccp_account2 b on a.accountsid=b.accountsid 
where a.end_day='2100-12-31' and b.day='2016-12-19' and b.accountsid is null;

看似两句SQL没有什么问题,可问题就出在这两张表的数据上,举个栗子。
SQL所指a表有以下数据:

accountsidend_day
12100-12-31
22100-12-31
32100-12-31

SQL所指b表有以下数据:

accountsidday
42016-12-19
52016-12-19

如此的话,为什么两种方式的结果不一样???第一句SQL不再多说,至于第二句SQL,先想想join完的结果是什么?对,b表的字段全为null!再使用where筛选b的字段,当然得到的数据为空。

综上所述,以后还是先where再join把,不仅能优化,而且查到的数据也不会出现问题。
明,白,了,吗?
白,了,吗?
了,吗?
吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值