【发布时间】:2018-02-27 03:36:31
【问题描述】:
我正在查询这张表:
SKU
aaaa
bbbb
bbbb
NULL
这是查询:
select *
from TEST as N
where N.SKU NOT IN (select SKU
from TEST
group by SKU
having count(*)>1);
我希望查询返回“aaaa”,但是,它什么也没返回。
我期望的原因是因为下面的子查询只返回'bbbb':
select SKU
from TEST
group by SKU
having count(*)>1
因此,'aaaa' 不在子查询结果中。
要显示错误,请将这些语句复制并粘贴到您的 MySQL IDE 中以创建架构:
drop table if exists TEST;
create table TEST(
SKU varchar(255)
);
insert into TEST values('aaaa'),('bbbb'),('bbbb'),(NULL);
【问题讨论】:
-
转载于 SQL Fiddle:sqlfiddle.com/#!9/769ffa/8
-
好的,显然它与表中的 NULL 有关。删除 NULL 会返回“aaaa”行:sqlfiddle.com/#!9/93efbf/1
-
@John Woo 子查询不返回 NULL,因此在这种情况下 NOT IN 无法与 NULL 进行比较。
-
@Shawn 没问题,我真的不知道。用字符串常量列表替换子查询
NOT IN ('bbbb')确实工作,所以它可能是优化器在内部做的事情。
标签: mysql