mysql - sql查询将可变数量的行合并为一行

标签 mysql sql

我的表:

people
      name      person_id 
        Joe     1 
        Jack    2 

tags   
      tag_id    tag_name 
          1     blue 
          2     green 
          3     black 
          4     red

assignments
      person_id tag_id 
          1     1 
          1     2 
          1     3 
          1     4 
          2     2 
          2     4

我想要的是如下结果:

结果

  name  tags 
  Joe   blue,green.black,red
  Jack  green,red

这里的独特之处在于,第三个表要求我首先加入标签的名称,我不想将它们连接起来,而不是原始 ID...

最佳答案

使用 GROUP_CONCAT()方法结合 GROUP BY

SELECT name, GROUP_CONCAT(tag_id) FROM people GROUP BY name;

对于编辑的部分,试试这个:

SELECT p.name, GROUP_CONCAT(t.tag_name)
    FROM people p
        JOIN assignments a ON p.person_id=a.person_id
        JOIN tags t ON t.tag_id=a.tag_id
    GROUP BY a.person_id;

关于mysql - sql查询将可变数量的行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32162380/

相关文章:

c# - 如何将系统版本化时态表与 Entity Framework 一起使用?

Mysql 谜题 : Conditions in ON vs. WHERE

php - 如何使用 PHP 获取 SQL 表一行中所有整数的总和?

mysql - 如果语句为真,则乘以列

sql - 如何通过子选择获取计数

MySQL:使用一个查找表查询具有不同查找ID的两个字段

php - 如何选择除一列以外的所有列作为用户定义的值

python - 在 SQLAlchemy 中映射大量相似的表

MySQL 查询从数据库中删除项目,但每天保留 1 行

php - 检查食谱是否包含成分 - MYSQL