我有一个主表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。如果要添加其他表怎么办?
数据库架构:
答案 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