我希望下面第三个查询的结果包含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
Qua*_*noi 48
来自文档:
为了符合
SQL标准,不仅IN返回NULL左侧的表达式NULL,而且如果在列表中找不到匹配项,并且列表中的一个表达式是NULL.
这正是你的情况.
二者IN并NOT IN返回NULL其不是一个可接受的条件WHERE子句.
重写您的查询,如下所示:
SELECT *
FROM match m
WHERE NOT EXISTS
(
SELECT 1
FROM email e
WHERE e.id = m.id
)
Run Code Online (Sandbox Code Playgroud)
小智 38
...或者如果你真的想用,NOT IN你可以使用
SELECT * FROM match WHERE id NOT IN ( SELECT id FROM email WHERE id IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)
我对MySQL如何处理空值的细节有点脱节,但这里有两件事要尝试:
SELECT * FROM match WHERE id NOT IN
( SELECT id FROM email WHERE id IS NOT NULL) ;
SELECT
m.*
FROM
match m
LEFT OUTER JOIN email e ON
m.id = e.id
AND e.id IS NOT NULL
WHERE
e.id IS NULL
Run Code Online (Sandbox Code Playgroud)
第二个查询看起来很直观,但它确实是连接条件,然后是where条件.这是连接和where子句不相等的情况.
| 归档时间: |
|
| 查看次数: |
180343 次 |
| 最近记录: |