MySQL-SELECT&GROUP BY问题

时间:2018-11-28 19:53:42

标签: mysql sql group-by group-concat

您好,美好的社区,

我对此数据库有一个基本配置MySQL / PHP:

  • 页数表
  • 标签表
  • Pages_Tags表

查询:

SELECT *, GROUP_CONCAT('tags_name')
FROM pages 
LEFT JOIN pages_tags ON pages_tags.pages_id = pages.pages_id
LEFT JOIN tags ON tags.tags_id = pages_tags.tags_id 
GROUP BY pages_tags.pages_id;

我有以下错误:

"Expression #1 of SELECT list is not in GROUP BY clause and contains
 nonaggregated column this is incompatible with sql_mode=only_full_group_by"

所以我做了很多研究,似乎有两种解决方案:

1 /更改SQL模式 2 /要在SELECT&GROUP BY中具有相同的列。

两者似乎都是不好的解决方案。第一个是因为我不想更改默认配置,第二个是疯狂的,所以我需要在SELECT中有很多列,而不仅仅是GROUP BY。尤其是在查询更加复杂且包含更多LEFT JOIN的情况下。我需要显示所有这些信息。

您有什么解决方案吗?其他方法的替代方案? 我对任何事物都开放;)

非常感谢!

1 个答案:

答案 0 :(得分:0)

从mysql 5.7开始,您可以在select中使用不涉及聚集函数的列,并且在group by子句中未提及,因此您不应该对列使用*(全部),而应在select中添加显式列名并在select中提及列不参与分组依据

    SELECT `pages_tags`.`pages_id`, GROUP_CONCAT('tags_name')
    FROM `pages` 
    LEFT JOIN `pages_tags` ON `pages_tags`.`pages_id` = `pages`.`pages_id` 
    LEFT JOIN `tags` ON `tags`.`tags_id` = `pages_tags`.`tags_id` 
    GROUP BY `pages_tags`.`pages_id`