我有以下查询
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
中具有相同的值
答案 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`)