テーブルがあるとします
Table A
---------------
id date_id (yyyyMMdd format)
---------------
1 20120101
2 20120102
3 20120103
行うことの違いは何ですか:
select a1.* from A a1
left outer join A a2
on a1.id = a2.id
and a1.date_id < a2.date_id
where a1.date >= 20120103
and a2.id is null
と
select a1.* from A a1
left outer join A a2
on a1.id = a2.id
and a1.date_id < a2.date_id
and a1.date_id >=20120103
where a2.id is null
最初に取得したクエリについて
id date_id
--------------
3 20120103
予想どおりですが、2番目のものについては取得します(クエリで選択されていないa2列ですが、わかりやすくするためにここに表示されています)
a1.id a1.date_id a2.id a2.date_id
---------------------------------------
1 20120101
1 20120101
2 20120102
2 20120102
3 20120103
2 番目のクエリも でフィルタリングするべきではありませんa1.date_id >= 20120103
か? date_id の行を返すのはなぜ20120101 and 20120102
ですか?