我希望下面第三个查询的结果包含id = 732。没有。这是为什么?
mysql> SELECT id FROM match ORDER BY id DESC LIMIT 5; + ------------ + | id | + ------------ + | 732 | | 730 | | 655 | | 458 | | 456 | + ------------ + 设置5行(0.00秒) mysql> SELECT id from email ORDER BY id DESC LIMIT 5; + ------------ + | id | + ------------ + | 731 | | 727 | | 725 | | 724 | | 723 | + ------------ + 设置5行(0.00秒) mysql> SELECT * FROM匹配WHERE ID NOT IN(SELECT ID FROM email); 空置(0.00秒)
表email.id中有三个NULL条目,match.id中没有NULL条目。
完整的表格/查询可以在 http://pastebin.ca/1462094
从 文档 :
为了符合该SQL标准,不仅在左侧的表达式IN 为时返回,而且在列表中未找到匹配项并且列表中的表达式之一为时返回。NULL``NULL``NULL
SQL
IN
NULL``NULL``NULL
这正是您的情况。
两者IN和NOT INreturn NULL都不是WHERE子句可接受的条件。
NOT IN
NULL
WHERE
重写查询,如下所示:
SELECT * FROM match m WHERE NOT EXISTS ( SELECT 1 FROM email e WHERE e.id = m.id )