我期望下面第三个查询的结果包含id = 732。它没有。这是为什么?MySQL SELECT x FROM WHERE NOT IN(SELECT x FROM b) - 意外的结果
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
这是OP的情况吗?我的理解是,“如果找不到匹配并且列表中的一个表达式为NULL”不是这种情况,因为应该找到732,从而使该条款无效,对吧? – Eric 2009-06-16 12:35:30
@Eric:732在电子邮件中找不到。 – Quassnoi 2009-06-16 12:37:52