我怀疑我的问题有重复,我很抱歉,因为我无法找到我正在寻找的东西。 如果是这样的话,你能告诉我在哪里可以找到答案吗?
我想管理一个歌曲库。
我有一个名为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`
但这给了我重复的多个艺术家的歌曲条目。有没有办法获得一个新的字段列出艺术家,比如逗号分隔?
答案 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个字符,但它可以增加,这在手册中定义