我有这个数据
1 => blue,
2 => red,
3 => red
我想要的只是:
[1, 2]
禁用MySql严格模式,或者更具体地说,禁用ONLY_FULL_GROUP_BY - 我可以
SELECT id ... GROUP BY color
但启用它后我无法做到这一点
SELECT color, id ... GROUP BY color, id
产生与我开始时相同的结果
除禁用严格模式和/或ONLY_FULL_GROUP_BY之外的任何帮助 或许我应该禁用它们。这似乎造成了更多的伤害
答案 0 :(得分:1)
问题在于您按color
进行分组,但如果存在多对一关系,则无法指定您要对id
执行的操作。
试试这个:
SELECT MIN(id) as id ... GROUP BY color
此行现在显示“按颜色分组,并为每个选择最小的id
。”而之前它发现了两个“红色”记录,并且不知道如何将它们组合。
答案 1 :(得分:0)
如果您使用
SET sql_mode = 'ONLY_FULL_GROUP_BY';
那么你的意思是你想要指出你在集合中用于聚合的所有列,所以如果你选择col1,col2,col3你必须在group by中设置col1,col2,col3 ..如果你没有需要'ONLY_FULL_GROUP_BY'这不会发生但是在aggreegation中选择的行是不可预测的..请参阅本教程以获取示例http://dev.mysql.com/doc/refman/5.6/en/counting-rows.html
在你的情况下,你没有使用聚焦函数,如count或min或max,所以看起来你不需要分组..
只获取第1行和第2行,您应该只使用像
这样的过滤器select color, id from my_table where id<> 3;