环境描述:
mysql版本:5.6.25-log
测试语句如下:
CREATE TABLE t1
(
id int NOT NULL,
username varchar(20)
);
INSERT INTO t1(id,username) VALUES(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'f'),(7,'g');
CREATE TABLE t2
(
id int NOT NULL,
ADDTIME datetime NOT null DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO t2(id,ADDTIME) VALUES(1,'2016-01-01'),(2,'2016-01-08'),(3,'2016-02-08'),
(4,'2016-04-05'),(5,'2016-05-02');
执行以下语句
SELECT *
FROM t1
LEFT JOIN t2 ON t1.id=t2.id
WHERE t2.ADDTIME<'2016-04-03`
竟然得到这下面的结果
如果以前使用Oracle,MSSQL的朋友应该很自然想到结果集应该是
在MySQL中在实现我们认为左关联以左边为准的结果必需人为的把谓语推进,如果在Oracle跟MSSQL是不需要人为的谓语推进(系统自动语推进)
PostgreSQL的文档里找到一个很适合的描述
我想这个解释比我上面解释清楚多了,果然语言组织能力有待加强啊!