GROUP BY与sql_mode = only_full_group_by'不兼容

时间:2017-10-05 02:15:48

标签: mysql sql

我有一个名为 monitor_links 的表格,其中包含以下列:

https://www.evanmiller.org/how-not-to-sort-by-average-rating.html

此表用于存储来自其他网站的链接。我使用此查询获取这些链接:

SELECT title, url
FROM monitor_links
WHERE id_domain = 5
GROUP BY url 
ORDER BY date_created asc

使用该查询,我从存储链接返回标题和URL(其中id_domain等于5)。但在我的情况下,可以存在具有相同 url 的行,并且不会使用GROUP BY url返回相同的重复 url (如果存在多个具有相同网址且id_domain = 5的行,则我的代码只返回其中一行)。

问题是我收到以下错误:

  

SELECT列表的表达式#1不在GROUP BY子句中并且包含   nonaggregated column' shuri.monitor_links.title'不是   功能上依赖于GROUP BY子句中的列;这是   与sql_mode = only_full_group_by'。

不兼容

有些人说我可以尝试禁用only_full_group_by,但我想修复查询而不是静音警告。

2 个答案:

答案 0 :(得分:3)

您可以使用ANY_VALUE函数告诉MySQL您要在组内返回任何值。

SELECT ANY_VALUE(title) AS title, url
FROM monitor_links
WHERE id_domain = 5
GROUP BY url

这实际上相当于暂时为此查询关闭ONLY_FULL_GROUP_BY

答案 1 :(得分:1)

如果您希望每titleurl,则:

SELECT MAX(title) as title, url
FROM monitor_links
WHERE id_domain = 5
GROUP BY url ;

如果您想要最新版本:

SELECT ml.*
FROM monitor_links ml
WHERE ml.created_date = (SELECT MAX(ml2.created_date)
                         FROM monitor_links ml2
                         WHERE ml2.url = ml.url AND ml2.id_domain = ml.id_domain
                        );