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

标签 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 中的所有条目以及关联的艺术家,如下所示:

飞机 => B.o.B,海莉·威廉姆斯

放松 => 米卡

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

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`

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

最佳答案

您可以使用 GROUP_CONCAT

SELECT `s`.`song_id`,
       `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`,
         `s`.`song_name`

请注意,它有 1024 个字符的默认限制,但可以增加,这在手册中有定义

Fiddle Demo

关于mysql - SQL列出一首歌的多个艺术家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460815/

相关文章:

javascript - 在年历的json数据源中填充mysql数据

php -$result->fetch_array 不起作用

php - symfony 通知 : Undefined index: username

sql - 将总计行添加到 SQL 查询的底部

php - 将从数据库中检索的行存储为 php 中的单独变量

mysql - SQL,按一列与一个不同列进行分组

mysql - INNER JOIN ON 多个属性不起作用

MySql 嵌套 View 返回空白或 0 而不是空值

sql - MySQL连接问题

MySQL 连接同一字段