如何修复多个联接表的查询?

时间:2020-05-12 19:36:28

标签: sql join select

我有一个主表M(电影)和其他表L(位置),G(流派)和S(子流派)。使用,每个“其他”表都与表M具有一对多关系。

我想列出所有蓝光标题,并提取其位置,长度(时间),注释,流派和子流派。

我的查询是:

SELECT L.Location, M.Title, M.Length, M.Comments, G.Genre, S.SubGenre
FROM ((L
INNER JOIN M ON M.Location = L.ID)
INNER JOIN G ON M.Genre = G.ID)
INNER JOIN SubGenre ON M.SubGenre = SubGenre.ID
ORDER BY M.ID
WHERE M.Type is "BluRay"
ORDER BY M.ID;

它给了我一个记录总数(447)的子集(26)的子集。

1。我有适当的表关系吗?

2。我真的需要括号吗? (没有它们的错误)

3。如何更改查询以为我提供所有位置记录以及与电影相关的适当信息?

4。如果要添加其他表怎么办?

数据库架构:

enter image description here

2 个答案:

答案 0 :(得分:0)

您需要在共享表列上进行联接。

对于“如何更改查询以提供所有位置记录以及适当的电影相关信息”,这取决于您认为合适的情况。

您不需要括号。除非您使用的是SQL数据库,否则我并不熟悉。

您不需要放入INNER,因为在所有类型的SQL数据库中,默认的JOIN是INNER JOIN。您还有2个ORDER BY M.ID,您只希望WHERE之后的那个。

我不确定您所说的更多表是什么意思,意味着要加入JOIN的表还是实际上有更多表?

答案 1 :(得分:0)

--  Note that Type and Length are in between square brackets, because those are reserved words.
--  Avoid use of reserved words with MovieType and MovieLength

SELECT 
            L.LocationName
        ,   M.Title
        ,   M.[Length]
        ,   M.Comments
        ,   G.GenreName
        ,   S.SubGenreName

FROM            Movies      M
    INNER JOIN  Location    L   ON  L.LocationID    =   M.LocationID
    INNER JOIN  Genre       G   ON  G.GenreID       =   M.GenreID
    INNER JOIN  SubGenre    S   ON  S.SubGenreID    =   M.SubGenreID 

WHERE       M.[Type]    = 'BluRay'
ORDER BY    M.MovieID