group-by不能处理子查询

gtlvzcf8  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(807)

我有以下问题

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

t9aqgxwy

t9aqgxwy1#

这与mysql上的新版本有关,该版本不允许不正确地使用group by。。
在查询中,您使用的是没有聚合函数的groupby,这是不允许的
而不是公寓

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`)

相关问题