MySQL将一个表中的值连接成另一个记录的内容

3
我有三个表(多对多关系):itemsitems_to_tagstagsitemstags表都有一个唯一的ID列,而items_to_tags表则有item_idtag_id列。是否有一种方法可以选择itemstags表中的所有结果,但将所有结果合并到同一条记录中?
例如,如果我有这些数据:
  • items:

    id     name
    1      'item1'
    2      'item2'
    
  • tags:

    id     name
    1      'tag1'
    2      'tag2'
    3      'tag3'
    
  • items_to_tags:

    item_id    tag_id
    1          1
    1          2
    1          3
    2          3
    
查询的结果应该是:
item_id   item_name   tags
1         'item1'     'tag1,tag2,tag3'
2个回答

6

您可以使用MySQL GROUP_CONCAT()函数:

select i.id,
  i.name,
  group_concat(t.name SEPARATOR ', ') tags
from items i
left join items_to_tags it
  on i.id = it.item_id
left join tags t
  on it.tag_id = t.id
group by i.id, i.name

查看 带演示的SQL Fiddle

结果:

| ID |  NAME |             TAGS |
---------------------------------
|  1 | item1 | tag1, tag2, tag3 |
|  2 | item2 |             tag3 |

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接