Mysql 如何使用联接查询多个弱表

Mysql 如何使用联接查询多个弱表,mysql,sql,Mysql,Sql,我有一个包含两个强实体和三个弱实体的数据库。弱实体仅对与其相关的强表的主键进行外键引用,以在表之间创建关联 我有一个查询,按照我想要的方式从一个表中进行选择,但不确定如何一次从所有三个表中进行选择,并在一个查询中显示数据 ERD: 我尝试了许多不同的连接,但无法使它们正常工作。此选择显示我想要的一个表的信息: select f.FilmName, concat(p.FirstName, ' ', p.LastName) as Producer from filmtable as f inner

我有一个包含两个强实体和三个弱实体的数据库。弱实体仅对与其相关的强表的主键进行外键引用,以在表之间创建关联

我有一个查询,按照我想要的方式从一个表中进行选择,但不确定如何一次从所有三个表中进行选择,并在一个查询中显示数据

ERD:

我尝试了许多不同的连接,但无法使它们正常工作。此选择显示我想要的一个表的信息:

select f.FilmName, concat(p.FirstName, ' ', p.LastName) as Producer
from filmtable as f
inner join persontable as p
inner join produced;
我希望能够选择并显示所有三个弱表中的所有信息,格式类似于:

电影名称、制片人、编剧、导演。

您需要:

select f.FilmName, concat(ppr.FirstName, ' ', ppr.LastName) as Producer,
concat(psw.FirstName, ' ', psw.LastName) as ScreenWriter,
concat(pdir.FirstName, ' ', pdir.LastName) as Director
from filmtable as f
left join produced as prod ON prod.FilmID = f.FilmID
left join Directed as dir ON dir.FilmID = f.FilmID
left join ScreenWote as sw ON sw.FilmID = f.FilmID
left join persontable as ppr ON prod.PersonID = ppr.personID
left join persontable as psw ON sw.PersonID = psw.personID
left join persontable as pdir ON dir.PersonID = pdir.personID;

另一种解决方案是在
SELECT
语句中使用
子查询
,在一行中实现所有三方,即制片人、编剧和导演

SELECT f.FilmName,
    (
        SELECT concat(p.FirstName, ' ', p.LastName)
        FROM persontable AS pt
        JOIN produced AS a
        ON pt.PersonID = a.PersonID
        WHERE p.FilmID = f.FilmID
   ) AS producer,
   (
       SELECT concat(p.FirstName, ' ', p.LastName)
       FROM persontable AS pt
       JOIN screenwrote AS a
       ON pt.PersonID = a.PersonID
       WHERE p.FilmID = f.FilmID
   ) AS ScreenWriter,
   (
       SELECT concat(p.FirstName, ' ', p.LastName)
       FROM persontable AS pt
       JOIN directed AS a
       ON pt.PersonID = a.PersonID
       WHERE p.FilmID = f.FilmID
   ) AS Director

FROM filmtable AS f