Mysql 使用连接表选择每个轨道的多个艺术家记录

标签 mysql

首先,我不确定是否可以在 1 个查询中完成此操作,但我确实希望如此。

我有这些表:

artist
- id
- name

track
- id
- title

track_artist
- track_id
- artist_id
(with UNIQUE index on the combined columns)

一个轨道可以有多个艺术家,一个艺术家可以有多个轨道,因此它们都使用联结表具有多对多关系。

现在我想要有关 Track #1 的信息,包括某种形式的数组(作为该记录中的值,可能名为 artists),其中包含与该轨道相关的所有艺术家记录。

伪代码最终应该看起来像这样:

- id : 1
- title : "example Track Title"
- artists :
    [
     - id : 1
     - name : "Foo Artist Name"
    ],
    [
     - id : 2
     - name : "Bar Artist Name"
    ]

这可能吗?如果没有,最好的方法是什么?

最佳答案

是的,您可以使用以下查询来完成此操作

    Select t.id,t.tital , group_concat(a.name) as artist name 
from track t join track_artist ta on t.id=ta.track_id inner join
 artist a on a.id=ta.artist_id group by t.id

关于Mysql 使用连接表选择每个轨道的多个艺术家记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38141624/

相关文章:

MySql:通过其父表的 id 从其他表获取表的总和,并返回具有与 parent_id 相关的总和值的所有子表

mysql - 从 mysql 表中选择加权随机分布

mysql - 仅针对具有相同 ID 的记录按字段对记录进行排序

php - Mysql 语句以特定顺序从数据库中提取信息并包含子集

php - 处理 Laravel 数据库查询中的空值?

php - MySQL UPDATE 表 WHERE 行数大于 n

java - 使用 JPA 将 Spring Boot 连接到 MySQL 时出错

php - 如何防止刷新时重复插入数据库?

mysql - 如何连接/合并同一个表中的多个结果?

mySQL 从单个表中为每个 user_id 选择时间戳接近的行