MySQL - 嵌套结果连接

Posted

技术标签:

【中文标题】MySQL - 嵌套结果连接【英文标题】:MySQL - nested result concatenation 【发布时间】:2015-06-23 12:57:53 【问题描述】:

我有 3 张桌子(来自 sakila 样本数据库):电影、电影演员和演员。

胶片:(1000行) 电影ID |标题 | …… ______________________ 1 |一个 | …… 2 |乙 | …… 3 | c | …… 4 | d | …… 5 |电子| …… …………………………………………………………………………………………………………………… Film_actor:(5000+ 行) 演员 ID |电影ID | …… ______________________ 1 | 12 | …… 1 | 33 | …… 2 | 210 | …… 3 | 2 | …… 3 | 500 | …… …………………………………………………………………………………………………………………… 演员:(~200行) 演员 ID |名字 |姓 __________________________________ 1 |一个 | F 2 |乙 | G 3 | c | H 4 | d |一世 5 |电子| l ...................................

有没有办法得到如下所示的结果:

片名(电影) |演员(名字,姓氏) _______________________________________________________________ 标题 1 | first_name1 last_name1,first_name2 last_name2 等等。 标题 2 | first_name1 last_name1,first_name2 last_name2 等等。 标题 3 | first_name1 last_name1,first_name2 last_name2 等等。 标题 4 | first_name1 last_name1,first_name2 last_name2 等等。 标题 5 | first_name1 last_name1,first_name2 last_name2 等等。 ..................................................... .....................

即将电影列表按 ID 排序,将电影中的所有演员放入第二列。 我已经检查过了,但自从嵌套连接以来,Stack Overflow 上没有任何答案似乎适合我的问题。 我只需要通过 mysql 查询得到这个结果。

【问题讨论】:

您可以使用 SQL 和任何可以很好地与 SQL 配合使用的编程语言(例如 php)的组合来创建这样的表,相当容易。 是的,我的错。我忘了指出我正在尝试通过单个查询获得该结果。我知道使用 php 相当简单,但这是一种学术练习。谢谢。 【参考方案1】:
select `title`, group_concat(concat(first_name, ' ', last_name)) as actors
from film inner join film_actor on film.film_id = film_actor.`film_id`
inner join actor on film_actor.actor_id = actor.actor_id
group by `title`

【讨论】:

以上是关于MySQL - 嵌套结果连接的主要内容,如果未能解决你的问题,请参考以下文章

MySQL连接两个不相关查询的结果

MySQL 嵌套连接排序

外连接内的 SQL 内连接;嵌套改变结果

MySQL中3表join流程分析

自嵌套SQL连接

MySQL数据库多表查询