选择一列,另一列 - ONLY_FULL_GROUP_BY

时间:2016-09-14 20:22:44

标签: mysql laravel select group-by strict

我有这个数据

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之外的任何帮助 或许我应该禁用它们。这似乎造成了更多的伤害

2 个答案:

答案 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;