【问题标题】:SQL Listing multiple artists for a songSQL 列出一首歌曲的多个艺术家
【发布时间】:2014-05-04 19:46:42
【问题描述】:

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

我想管理一个歌曲库。

我有一张叫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`

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

【问题讨论】:

    标签: mysql sql join associative


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 谢谢M Khalid JunaidGROUP_CONCAT 完全符合我的需要,我遇到了该功能但无法使其工作。感谢您的快速答复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多