使用SQL查询获得奇怪的语法错误

问题描述 投票:1回答:1

我正在编写一个相当简单的SQL查询来修改IMDB数据库;它应该返回所有被归类为恐怖和喜剧的电影的列表,我通过创建恐怖列表,喜剧列表,然后从一个不在另一个中删除所有内容来完成。查询如下:

WITH

table_left AS (SELECT primary_names.name AS name, year, genre, title_id
FROM titles NATURAL JOIN primary_names NATURAL JOIN title_genres WHERE genre = 'Horror'),

table_right AS (SELECT primary_names.name AS name, year, genre, title_id
FROM titles NATURAL JOIN primary_names NATURAL JOIN title_genres WHERE genre = 'Comedy')

DELETE FROM table_right WHERE (title_id NOT IN (SELECT table_left.title_id))

SELECT name, year FROM table_right;

但是,这会在查询的最后一行生成“错误:SELECT'附近的语法错误”。我对SQL很新,但已多次查看语法并检查了一些指南,我无法理解出现了什么问题。在删除FROM语句后不应该有逗号,我不认为我在任何不适当的地方都有逗号...它可能正在盯着我,但我不知所措,并且会喜欢听到任何建议。

mysql sql database
1个回答
2
投票

当您使用WITH语法时,您可以声明多个table expressions,但是您可以只使用一个SQL查询来跟随它。

但是你有两个 - 一个是DELETE后跟一个SELECT,两个语句之间没有语句终止符。这与SQL的任何语法规则都不匹配。

我可以评论另一种实现你想要的方式,列出两个类别的电影,就是做一个自我加入。

SELECT p.name, t.year, t.title_id
FROM titles AS t
INNER JOIN title_genres AS g1 ON t.title_id = g1.title_id AND g1.genre = 'Horror'
INNER JOIN title_genres AS g2 ON t.title_id = g2.title_id AND g2.genre = 'Comedy'
INNER JOIN primary_names AS p ON t.title_id = p.title_id

如果你使用SQL编码,你真的需要学习如何使用JOIN。不这样做就像使用Java或Ruby之类的其他语言而不理解循环。我并不是说连接类似于循环,只是连接是SQL语言的基础部分,您需要知道如何使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.