我怀疑我的问题有重复,对此我深表歉意,因为我找不到我要找的东西。 如果是这样,您能告诉我在哪里可以找到答案吗?
我想管理一个歌曲库。
我有一个名为 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/