SQL - 查询帮助

时间:2014-10-29 19:44:01

标签: mysql sql database

我对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%'

2 个答案:

答案 0 :(得分:0)

好像你缺少titlemovie_link表之间联接的连接谓词。

我建议您不要在语句中混合使用“逗号”和“JOIN关键字”语法。也就是说,删除titlemovie_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,否则您可能会得到重复的结果。