MySQL:mm 表的结果作为逗号分隔列

标签 mysql group-concat

我对此 SQL counting all rows instead of counting individual rows 有两个问题:

1.) 为什么第 2 行不在结果列表中。

2.) 在生产中(mysql 5.7)我收到错误

SELECT 列表包含非聚合列,这与 sql_mode=only_full_group_by 不兼容...

MySQL 5.6 架构设置:

CREATE TABLE MM(
  `post_id` int, 
  `tag_id` int
);

CREATE TABLE Post
(
  `post_id` int, 
  `name` varchar(200)
);

CREATE TABLE Tag(
  `tag_id` int, 
  `tagname` varchar(200)
);

Insert into Post values (1, "First Post");
Insert into Post values (2, "Second Post");

Insert into Tag values (1, "sql");
Insert into Tag values (2, "mm relation");
Insert into Tag values (3, "group concat");

Insert into mm values (1, 1);
Insert into mm values (1, 2);
Insert into mm values (1, 3);

查询 1:

Select 
  Post.post_id,
  Post.name, 
  GROUP_CONCAT(t.tagname SEPARATOR ',') as tags 
  from Post 
left join 
  MM on MM.post_id = Post.post_id
left join
  Tag as t on t.tag_id = MM.tag_id

SQL Fiddle:

| post_id |       name |                         tags |
|---------|------------|------------------------------|
|       1 | First Post | sql,mm relation,group concat |

最佳答案

如果您需要将每个帖子的标签分组,您应该使用GROUP BY Post.post_id:

Select 
  Post.post_id,
  Post.name, 
  GROUP_CONCAT(t.tagname SEPARATOR ',') as tags 
  from Post 
left join 
  MM on MM.post_id = Post.post_id
left join
  Tag as t on t.tag_id = MM.tag_id
GROUP BY Post.post_id

您还可以使用DISTINCT来确保您只获得唯一的关键字:http://sqlfiddle.com/#!9/e7c87e/12

关于MySQL:mm 表的结果作为逗号分隔列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43288026/

相关文章:

java.sql.SQLException : No suitable driver - heroku

mysql - MYSQL中如何获取身份证?

php - 创建一个带有空白方 block 的表,用于丢失 mysql 数据

mysql - 在左连接中使用 group_concat

mysql - 查询连接同表错误

mysql - SQL 使用查询结果创建另一个表

php - 按Name等字段对Mysql查询进行排序

mysql - Zend Db Select 中带有 JOINLEFT 的 GROUP_CONCAT

php - 具有嵌套集模型的 GROUP_CONCAT

mysql子查询返回多行