为何出现‘Expected end of input but got keyword SELECT’错误?如何修正查询?
子查询语法错误修正方案
根据你给出的错误提示Syntax error: Expected end of input but got keyword SELECT at [5:3],说白了就是SQL解析器本来以为查询已经写完了,结果在第5行第3列又读到了SELECT关键字,大概率是子查询的写法不符合规范,常见的问题和改法如下:
情况1:子查询没放在正确的语法位置里
比如你可能在主查询结束后直接加了另一个SELECT语句,或者子查询没套括号、没放到FROM/WHERE这类允许子查询的地方。
类似你截图里的错误写法大概是这样:SELECT col1, col2 FROM table1 WHERE col3 = 123 SELECT colA FROM table2 WHERE colB = 456要修正的话,得把第二个查询作为子查询放到合适的位置,比如:
-- 放到WHERE条件里,用IN关联 SELECT col1, col2 FROM table1 WHERE col3 IN (SELECT colA FROM table2 WHERE colB = 456) -- 或者作为派生表和主表关联 SELECT t1.col1, t1.col2, t2.colA FROM table1 t1 JOIN (SELECT colA, colB FROM table2 WHERE colB = 456) t2 ON t1.col3 = t2.colB情况2:主查询末尾多了多余的SELECT
可能是手滑重复输入了SELECT,或者粘贴代码时带了多余的内容,直接删掉多余的那行SELECT语句就行。情况3:子查询没加括号
子查询必须用()包起来,不然SQL解析器识别不了。比如错误写法:SELECT col1 FROM table1 WHERE col2 = SELECT col3 FROM table2改完之后:
SELECT col1 FROM table1 WHERE col2 = (SELECT col3 FROM table2 LIMIT 1)
内容的提问来源于stack exchange,提问作者Fanaway
相关产品推荐
相关产品推荐

