使用INNER JOIN合并临时SQL表时提示“Missing keyword”的问题排查
解决SQL "Missing keyword" 错误的方案
嘿,这个问题我在日常写SQL时碰到过好多次,咱们拆解一下问题所在:
你的SQL语句存在两个关键语法问题,直接导致了"Missing keyword"的报错:
缺少最外层的SELECT和FROM关键字
SQL语句的核心结构是SELECT 要查询的字段 FROM 数据源,你现在的写法直接把两个子查询拼起来做连接,完全跳过了最基础的SELECT和FROM部分,数据库根本无法识别这是一个完整的查询语句。INNER JOIN必须搭配ON关键字指定连接条件
在标准SQL语法(尤其是Oracle这类数据库)中,使用JOIN语法连接表/派生表时,必须通过ON子句明确声明连接条件,不能直接用WHERE来替代。虽然有些数据库对WHERE的兼容度较高,但Oracle会严格校验JOIN的语法规范,没有ON就会触发关键字缺失的错误。
修正后的示例代码
-- 根据实际需求选择要查询的字段,这里以两个子查询的field1为例 SELECT temp1.field1, temp2.field1 FROM (SELECT field1 FROM TB1 INNER JOIN ... WHERE etc) temp1 INNER JOIN (SELECT field1 FROM TB2 INNER JOIN ... WHERE etc) temp2 -- 用ON替代WHERE来指定JOIN的连接条件 ON temp1.field1 = temp2.field1
另外补充一点:派生表的别名(比如temp1、temp2)前面的AS关键字在多数数据库中可以省略,不是导致报错的原因,核心还是前面提到的两个问题哦。
内容的提问来源于stack exchange,提问作者Paulo Silva
相关产品推荐
相关产品推荐

