代码之家  ›  专栏  ›  技术社区  ›  MST QNB

如何针对单个表选择多个多对多

  •  1
  • MST QNB  · 技术社区  · 8 年前

    我目前正在处理数据库,但我遇到了一个选择查询。 然而,我不是数据库专家。 查询应该从具有两个多对多关系的表中返回数据。

    这是我的表格图表,它显示了我问题的概念

    enter image description here

    选择查询应查看三列,即VidTbl。姓名、演员。名称和子标题Tbl.Name。

    所以,我已经在互联网上阅读和搜索过,我也尝试过

    第一次尝试

    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
    

    我得到的结果是错的

    enter image description here

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

    第二次尝试

        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
    

    错误,我在最后一次选择中出错

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

    2 回复  |  直到 8 年前
        1
  •  1
  •   Isaac    8 年前

    你离得很近。这应该有效。。。

    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
    
        2
  •  0
  •   Eric    8 年前
    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