【问题标题】:Syntax error in SQL statement "WITH" keywordSQL 语句“WITH”关键字中的语法错误
【发布时间】: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 成功执行它。

感谢任何帮助。

谢谢。

【问题讨论】:

标签: java sql h2


【解决方案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 。 . .如果您还有其他问题,应将其作为问题而非评论发布。
  • 对不起。我还创建了一个新问题,请您看看...这是链接stackoverflow.com/questions/22722561/… 非常感谢!!!
猜你喜欢
  • 2014-05-08
  • 2016-03-10
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多