GROUP BY不适用于子查询

时间:2018-01-01 18:19:31

标签: mysql mariadb

我有以下查询

SELECT `id` FROM `TableA` WHERE `color` LIKE '%red%' 
AND `id` IN (SELECT `id` FROM `TableB` GROUP BY `option`)

当我运行此查询时,我得到的结果与运行

相同
SELECT `id` FROM `TableA` WHERE `color` LIKE '%red%' 
AND `id` IN (SELECT `id` FROM `TableB`)

我获得了400多条记录。但是,如果我跑

SELECT `id` FROM `TableB` GROUP BY `option`

我得到了18条记录。

我暂时没有运行此查询,但我记得它正在运行。我上次运行它与现在之间发生的唯一变化是我从MySQL 5.5(或5.6)升级到MariaDB 10.1。知道为什么它停止工作吗?

这是SQL小提琴 http://sqlfiddle.com/#!9/440224/1

它返回ID为1,2和3的记录,即使1和2在TableB中具有相同的值

1 个答案:

答案 0 :(得分:2)

这与mysql上的新版本有关,不允许不正确地使用group ..

在您的查询中,您使用的是没有聚合函数的组,并且不允许这样做

而不是单位

SELECT `id` FROM `TableA` WHERE `color` LIKE '%red%' 
AND `id` IN (SELECT `id` FROM `TableB` GROUP BY `option`)

你应该给我们一个aggegation函数来回复id,例如:

SELECT `id` FROM `TableA` WHERE `color` LIKE '%red%' 
AND `id` IN (SELECT min(`id`) FROM `TableB` GROUP BY `option`)