如何 select 与单个 table 相关的多对多

How to select multiple many to many in relation with a single table

我目前正在使用数据库,但我遇到了 select 查询。 但是,我不是数据库专家。 查询应该 return 来自具有两个多对多关系的 table 的数据。

这是我的 table 图表,可以显示我的问题的概念

Select查询应该查看三列,分别是VidTbl.Name、ActorTbl.Name和SubTitelTbl.name。

所以,我已经在 Internet 上阅读和搜索并且尝试过

第一次尝试

SELECT  
        VidTbl.NAME AS Video_Titel_Name,
        ActorTbl.NAME AS Actor_Name

FROM    ActorInVid 

INNER JOIN VidTbl

ON VidTbl.Id = ActorInVid.FKVidId 

INNER JOIN ActorTbl

ON ActorTbl.Id = ActorInVid.FKActorId



UNION all

SELECT 
        VidTbl.NAME AS Video_Titel_Name,
        SubTitelTbl.NAME AS SubTitel_Langu

FROM SubTitelInVid

INNER JOIN VidTbl

ON VidTbl.Id = SubTitelInVid.FKVidId

INNER JOIN SubTitelTbl 

ON SubTitelTbl.Id = SubTitelInVid.FKSTId

我得到的结果是错误的

然后我尝试了另一种方法来解决这个问题,但是我又遇到了另一个错误

第二次尝试

    SELECT Temp1.* 
From  (SELECT    VidTbl.Id        AS Video_Id,
                 VidTbl.NAME      AS Video_Titel_Name,
                 ActorTbl.NAME    AS Actor_Name

       FROM      ActorInVid  
       INNER JOIN VidTbl
               ON VidTbl.Id = ActorInVid.FKVidId 
       INNER JOIN ActorTbl
               ON ActorTbl.Id  = ActorInVid.FKActorId) AS  Temp1

SELECT Temp2.*
FROM  (SELECT VidTbl.Id           AS Video_Id,
              SubTitelTbl.NAME    AS SubTitel_Langu 
      FROM SubTitelInVid
INNER JOIN VidTbl
        ON VidTbl.Id      = SubTitelInVid.FKVidId
INNER JOIN SubTitelTbl 
        ON SubTitelTbl.Id = SubTitelInVid.FKSTId) AS Temp2


SELECT * 
FROM   VidTbl
INNER JOIN Temp1 
        on Temp1.Video_Id = VidTbl.Id
INNER JOIN Temp2
        on Temp2.Video_Id = VidTbl.Id

错误,我在上一个select错误

非常感谢您的帮助 我希望我的问题清楚且有用 再次感谢。

你很接近。这应该有效...

SELECT 
VidTbl.Name, 
ActorTbl.Name, 
SubTitelTbl.name
FROM VidTbl
INNER JOIN ActorInVid ON VidTbl.Id = ActorInVid.FKVidId 
INNER JOIN ActorTbl ON ActorTbl.Id = ActorInVid.FKActorId
INNER JOIN SubTitelInVid ON VidTbl.Id = SubTitelInVid.FKVidId
INNER JOIN SubTitelTbl ON SubTitelTbl.Id = SubTitelInVid.FKSTId
SELECT DISTINCT vt.Name, at.Name, st.Name
FROM VidTbl vt
JOIN ActionInVid aiv ON aiv.VidId = vt.Id
JOIN SubtitleInVid siv ON siv.VidId = vt.Id
JOIN ActorTbl at ON at.Id = aiv.ActorId
JOIN SubTitleTbl st ON st.Id = siv.STId