我正在查询这张表:
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);
最佳答案
这工作正常,如果子查询只返回一行:
SELECT *
FROM TEST as N
WHERE N.SKU NOT IN (
CAST((select SKU from TEST group by SKU having count(*)>1) AS CHAR)
)
但是,如果它返回多于 1 行,则会触发错误。另一种解决方案(如果子查询返回多于 1 行):
SELECT *
FROM TEST as N
WHERE N.SKU IN (
(select SKU from TEST group by SKU having count(*) <= 1)
)
关于MySQL 错误 : NOT IN + subquery using GROUP BY HAVING returns nothing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49000700/