SQL列出一首歌曲的多个艺术家

时间:2014-05-04 19:46:42

标签: mysql sql join associative

我怀疑我的问题有重复,我很抱歉,因为我无法找到我正在寻找的东西。 如果是这样的话,你能告诉我在哪里可以找到答案吗?

我想管理一个歌曲库。

我有一个名为songs的表格:

song_id    song_name
====================
1          Airplanes
2          Relax

我有一个名为artists的表格:

artist_id    artist_name
============================
1            B.o.B
2            Hayley Williams
3            Mika

并允许一首歌有多位艺术家,我有一张名为assoc的表:

song_id    artist_id
====================
1          1
1          2
2          3

我希望SELECT songs中与相关艺术家相关的所有条目,如下所示:

Airplanes => B.o.B, Hayley Williams

Relax => Mika

到目前为止,这是我尝试过的:

SELECT `songs`.`song_name`, `artists`.`artist_name`
FROM `assoc`
JOIN `songs` ON `songs`.`song_id`=`assoc`.`song_id`
JOIN `artists` ON `artists`.`artist_id`=`assoc`.`artist_id`

但这给了我重复的多个艺术家的歌曲条目。有没有办法获得一个新的字段列出艺术家,比如逗号分隔?

1 个答案:

答案 0 :(得分:1)

您可以使用GROUP_CONCAT

SELECT `s`.`song_name`,
GROUP_CONCAT(`a`.`artist_name`) `artists`
FROM `assoc` 
JOIN `songs` s ON `s`.`song_id`=`assoc`.`song_id`
JOIN `artists` a ON `a`.`artist_id`=`assoc`.`artist_id`
GROUP BY `s`.`song_id`

要知道这个事实,它的默认限制为1024个字符,但它可以增加,这在手册中定义

Fiddle Demo