【问题标题】:MySQL - Issue with SELECT & GROUP BYMySQL - SELECT 和 GROUP BY 的问题
【发布时间】:2019-04-30 19:31:39
【问题描述】:

你好,精彩的社区,

我有这个数据库的基本配置 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。我需要显示所有这些信息。

你有什么解决办法吗?用其他方法替代? 我对任何事情都持开放态度;)

非常感谢!!

【问题讨论】:

  • 向我们展示一些示例数据
  • 什么样本数据?它是一个基本结构:百列的页面表、少列的标签表和连接两者的联合表,因为一个页面可以链接到多个标签。我需要在一个字段中列出所有链接标签的页面列表。

标签: mysql sql group-by group-concat


【解决方案1】:

从 mysql 5.7 开始,您可以在 select 中使用不涉及聚合函数且未在 group by 子句中提及的列,因此您不应使用 *(all)作为列,而应在 select 中添加显式列名并在 select 中提及该列不参与group by的聚合函数

    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`

【讨论】:

  • 谢谢!但这对我没有帮助。因为就像我在帖子末尾所说的那样,我需要更多信息。我需要所有表格列。这就是为什么我写“SELECT *”所以我该怎么办?
  • 然后更新您的问题并添加适当的数据样本和预期结果
  • 预期的结果很简单:我想要所有的数据!不仅仅是“pages_tags.pages_id, GROUP_CONCAT('tags_name')”,我还需要“*, GROUP_CONCAT('tags_name')” 而且我正在寻找一种解决方案来获取所有数据。我需要 PAGES 表的所有列。
  • 您已经发布了一个错误问题,而我的回答是错误 si 不再存在.. 所以我认为我的回答是解决您的问题的正确解决方案“SELECT 列表的表达式 #1 不在GROUP BY 子句并包含非聚合列,这与 sql_mode=only_full_group_by" 不兼容。由于我们不知道您的数据结构以及如果有人要求更好地解释您真正需要什么,我认为您应该回答添加所要求的信息..不要避免这样做。否则我们无法提出有效的建议
  • 我发布了我的问题,指出了原因以及如何解决它。所以我已经知道了。但是我说这两种解决方案都不符合我的需要,因为我不能在 GROUP BY 和 SELECT 中只有相同的列。无论我的数据结构是什么,问题仍然是:如何拥有 GROUP_BY 中的更多字段。我的结构是基本的:2张桌子和一张联合桌子。这是一个基本结构。我的期望是获得所有的专栏。那么 GROUP_CONCAT 和 GROUP_BY 是否有解决方案,或者是否有其他 MySQL 方法的替代方案?
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
相关资源
最近更新 更多