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