我希望下面第三个查询的结果包含id = 732 . 它没有 . 这是为什么?
mysql> SELECT id FROM match ORDER BY id DESC LIMIT 5 ;
+------------+
| id |
+------------+
| 732 |
| 730 |
| 655 |
| 458 |
| 456 |
+------------+
5 rows in set (0.00 sec)
mysql> SELECT id FROM email ORDER BY id DESC LIMIT 5 ;
+------------+
| id |
+------------+
| 731 |
| 727 |
| 725 |
| 724 |
| 723 |
+------------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM match WHERE id NOT IN ( SELECT id FROM email ) ;
Empty set (0.00 sec)
表email.id中有三个NULL条目,match.id中没有NULL条目 .
完整的表/查询可以在http://pastebin.ca/1462094看到
4 回答
...或者如果你真的想使用
NOT IN
,你可以使用我对MySQL如何处理空值的细节有点脱节,但这里有两件事要尝试:
第二个查询看起来很直观,但它确实是连接条件,然后是where条件 . 这是连接和where子句不相等的情况 .
这是一些实际上有意义的SQL:
简单总是更好 .
从documentation:
这正是你的情况 .
IN
和NOT IN
都返回NULL
,这不是WHERE
子句的可接受条件 .重写您的查询,如下所示: