SQL 语句“WITH”关键字中的语法错误

Posted

技术标签:

【中文标题】SQL 语句“WITH”关键字中的语法错误【英文标题】:Syntax error in SQL statement "WITH" keyword 【发布时间】:2014-03-27 22:17:20 【问题描述】:
jdbc:h2:mem:request_no;MODE=Oracle

我们在 windows 7(64 位)和 jdk 1.7.0_25 中使用 h2 版本 1.3.171。

当我们尝试运行 SQL 语句时:

WITH TMP1 AS (SELECT col1 FROM table1) SELECT TMP1.col1 FROM TMP1 

我们得到以下异常:

org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement 
"WITH TMP1 AS[*] (SELECT REQUEST_NO FROM QUOTE) 
  SELECT TMP1.REQUEST_NO FROM TMP1";
expected "., ("; SQL statement:
WITH TMP1 AS (SELECT REQUEST_NO FROM QUOTE) 
  SELECT TMP1.REQUEST_NO FROM TMP1 [42001-171]

SQL 语句很好,我们可以通过 SQL Developer 成功执行它。

感谢任何帮助。

谢谢。

【问题讨论】:

你用的是什么数据库? H2 不支持正则公用表表达式,它只支持递归 CTE:h2database.com/html/advanced.html#recursive_queries 【参考方案1】:

尝试将列定义为 CTE 定义的一部分:

WITH TMP1(REQUEST_NO) AS
      (SELECT REQUEST_NO FROM QUOTE
      )
SELECT TMP1.REQUEST_NO
FROM TMP1;

我认为某些数据库在使用 with 时需要明确的列列表。

【讨论】:

非常感谢@Gordon Linoff ...我能够按照您的解决方案运行查询。 在一个类似的故事中,我还添加了另一个 TMP2,但无法运行查询...您能帮我解决这个问题吗? WITH TMP1(REQUEST_NO) AS (SELECT REQUEST_NO FROM QUOTE) SELECT TMP1.REQUEST_NO FROM TMP1; WITH TMP1(REQUEST_NO) AS (SELECT REQUEST_NO FROM QUOTE), TMP2(AGENT) AS (SELECT AGENT FROM AGENT_TAB) SELECT TMP2.AGENT FROM TMP2;谢谢你的帮助!!! @Anteneh 。 . .如果您还有其他问题,应将其作为问题而非评论发布。 对不起。我还创建了一个新问题,请您看看...这是链接***.com/questions/22722561/… 非常感谢!!!

以上是关于SQL 语句“WITH”关键字中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

访问中的 SQL 更新语句的语法错误

SQL 语句“CREATE TABLE TRIP...”中的语法错误

oracle数据库有没有top这个关键字的。今天用top这个关键字的时候,它提示我的sql语句有语法错误

sql的语句提示有语法错误,求大神 create database if not exists `fwzl`;

Apache ignit:SQL 语句创建表中的语法错误

错误:您的 SQL 语法有错误 - 但 SQL 语句有效