Mysql SQL-查询帮助
我对SQL非常陌生,我正在从事一项任务,这项任务要求我根据IMDB数据库找到一家公司制作的电影,该公司的名称中有“电影”。 可在此处查看此数据库的图表: 这就是我正在处理的问题Mysql SQL-查询帮助,mysql,sql,database,Mysql,Sql,Database,我对SQL非常陌生,我正在从事一项任务,这项任务要求我根据IMDB数据库找到一家公司制作的电影,该公司的名称中有“电影”。 可在此处查看此数据库的图表: 这就是我正在处理的问题 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%'
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%'
似乎缺少
标题
和电影链接
表之间联接的联接谓词
我建议不要在语句中混合使用“逗号”和“JOIN关键字”语法。也就是说,删除标题
和电影链接
)之间的逗号,并将其替换为关键字加入
。如果不希望交叉连接,请添加连接谓词
另外,在连接谓词中使用语法的对我来说有点模棱两可。我建议您明确指定要从哪些表中匹配哪些列,就像您在加入movie\u 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%'
你的代码看起来确实有点接近你需要的东西,但是有一些奇怪的东西。首先,这里的隐式连接title t,movie\u 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
,否则可能会得到重复的结果。您会遇到什么错误..似乎不需要在all@Lamak你可能是对的。在后面的连接谓词中,该表中有一个对movie\u id
的引用。如果不需要该表,则可以从查询中删除包含“movie_link”的整行,并且可以修改引用该列的连接谓词。(我可能会将查询向后写,从company_name表作为FROM子句中的第一个表开始,然后将联接添加到每个附加表中。)