MySQL 错误 : NOT IN + subquery using GROUP BY HAVING returns nothing

标签 mysql

我正在查询这张表:

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/

相关文章:

MySQL从另一个表插入列数据

mysql - 使用内部连接从单个表中删除行

Mysql 3方式连接错误

MySQL 查询以获取列 1 的值在列 2 中具有一组值

php - Mysql IN() 不工作

函数内的 MySql 案例

php - mysql:查找指定时间段内的记录组

mysql - 在 MySQL 存储过程中的另一语句中使用一个选择查询中获得的结果

php - Yii 2.0 数据库迁移命令

php - Laravel 查找开放时间内的 2 个日期之间的时间量