繁体   English   中英

在SQL Server中联接3个具有一对多和多对多关系的表

[英]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_nameproducer_namedirector_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM