假设我有一张桌子
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
正如预期的那样,但是对于我得到的第二个(a2 列未在查询中选择,但为清楚起见在此处显示)
a1.id a1.date_id a2.id a2.date_id
---------------------------------------
1 20120101
1 20120101
2 20120102
2 20120102
3 20120103
第二个查询不应该也过滤a1.date_id >= 20120103
吗?为什么它返回带有 date_id's 的行20120101 and 20120102
?