预先感谢,我是数据库设计和查询的新手 我有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有多对一关系)
((导演__id,导演名称)
producer_table (与film_table有多对一关系)
(生产者ID,生产者名称)
我也有一个格式如下的映射表:
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;
答案 0 :(得分:0)
我不确定影片表中为什么有一个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
答案 1 :(得分:0)
您的主要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;