我对SQL很陌生,我正在完成一项任务,要求我找一家电影是由公司制作的电影"电影"以IMDB数据库为基础的名称。 可在此处查看此数据库的图表: http://i.imgur.com/kj8qVgF.png
这是我正在处理的查询。
SELECT t.title, t.id
FROM title t, movie_link m
JOIN movie_companies c ON (m.movie_id = c.movie_id)
JOIN company_name n USING (id)
WHERE n.name LIKE '%films%'
答案 0 :(得分:0)
好像你缺少title
和movie_link
表之间联接的连接谓词。
我建议您不要在语句中混合使用“逗号”和“JOIN关键字”语法。也就是说,删除title
和movie_link
之间的逗号,并将其替换为关键字JOIN
。如果您不想要交叉连接,请添加连接谓词。
此外,连接谓词中的USING
语法对我来说有点模棱两可。我建议您明确指定要匹配哪些表的列,就像您对movie_companies
表的连接所做的那样。
以下查询无法运行。 ???需要用适当的标识符和别名替换:
SELECT t.title
, t.id
FROM title t
JOIN movie_link m ON m.??? = t.???
JOIN movie_companies c ON c.movie_id = m.movie_id
JOIN company_name n ON n.id = ???.???
WHERE n.name LIKE '%films%'
答案 1 :(得分:0)
你的代码似乎与你所需要的有些接近,但有一些奇怪的东西。首先,这里的隐式连接title t, movie_link m
正在这些表之间执行笛卡尔积。这段代码应该有效:
SELECT DISTINCT t.id, t.title
FROM title t
INNER JOIN movie_companies mc
ON t.id = mc.movie_id
INNER JOIN company_name cn
ON mc.company_id = cn.id
WHERE cn.name LIKE '%films%'
您需要从该图表中考虑几件事情才能获得所需的结果。例如,由于不同的公司可以是同一部电影的创建者(图表允许),您需要使用DISTINCT
,否则您可能会得到重复的结果。