join in where


これも私が初めてsqlのjoin in inに接触したわけではありません.前に書いたjoin inのwhere条件は、joinを先に使うかwhereを先に使うかを考えたことがありません.whereを先に使うのが最適化されている以外は、この2つの結果は同じだと思いますから.以前は問題に遭遇していませんでしたが、今問題が発生しました.joinかwhereか、事実は私が間違っていることを証明して、みんなに警告するために、このブログをSQL入門の友达に捧げました.私の書いた2つの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の2つの文に問題はないように見えますが、問題はこの2つの表のデータに出て、栗を挙げます.SQLが指すaテーブルには、次のデータがあります.
accountsid
end_day
1
2100-12-31
2
2100-12-31
3
2100-12-31
SQLが指すbテーブルには、次のデータがあります.
accountsid
day
4
2016-12-19
5
2016-12-19
では、なぜ2つの方法の結果が違うのでしょうか??第1句SQLはもう多く言わないで、第2句SQLについて、まずjoinが終わった結果を考えてみましょうか?はい、bテーブルのフィールドはすべてnullです.さらにwhereフィルタbのフィールドを使用すると、当然得られるデータは空です.
以上のように、後でwhereからjoinで最適化できるだけでなく、調べたデータにも問題はありません.明、白、了、か?白、了、か?はい、そうですか.そうですか.