[英]Joining 3 tables having one-to-many and many-to-many relationships in SQL Server
在此先感谢,我是数据库设计和查询的新手,我有4个表,分别是film_table,actors_table,director_table和producer_table,如下所示:
film_table
(电影ID,电影名称,演员ID,制片人ID,导演ID)
actor_table (与film_table有多对多关系)
(actor_id,actor_name)
director_table (与film_table有多对一关系)
(director__id,director_name)
producer_table (与film_table有多对一关系)
(producer_id,producer_name)
我还有以下形式的映射表:
Actor_Film_Mapping
(演员ID,电影ID)
我需要查询数据库以获取以下格式的数据:
(电影名称,演员名称,制片人名称,导演名称)
我已经尝试了以下查询:
SELECT f.film_name
FROM Film_table f
INNER JOIN Actor_table a
on f.actor_id= a.actor_id
INNER JOIN Actor_Film_Mapping afm
on a.actor_id = afm.actor_id;
我不确定影片表中为什么有Actor_id,也许是为了明星。
由于您具有映射表,因此可以使用它,但是如果它们不在映射表中,那么您可能还需要包括电影表中的actor
SELECT f.film_name, a.actor_name
FROM Film_table f
INNER JOIN Actor_Film_Mapping afm
on f.film_id = afm.film_id;
INNER JOIN Actor_table a
on afm.actor_id= a.actor_id
主film_table
任何演员数据似乎都film_table
,因为您(正确)在映射表中强制执行的电影与演员之间存在多对多关系。 我会删除该字段,除非它具有与此处问题无关的目的。
您的问题似乎只需要将所有表连接到各个ID字段上即可。 因为电影对演员多到很多,你的结果对于任何给定的电影将有film_name
, producer_name
和director_name
重复的每个值actor_name
,但此查询会给你你需要的所有数据点的建议答案:
SELECT
f.film_name,
a.actor_name,
p.producer_name,
d.director_name
FROM
film_table AS f
JOIN
Actor_Film_Mapping AS afm
ON afm.actor_id = f.film_id
JOIN
actor_table AS a
ON a.actor_id = afm.actor_id
JOIN
producer_table AS p
ON p.producer_id = f.producer_id
JOIN
director_table AS d
ON d.director__id = f.director__id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.