Синтаксическая ошибка в операторе SQL с ключевым словом WITH

1
jdbc:h2:mem:request_no;MODE=Oracle

Мы используем версию h2 1.3.171 с окнами 7 (64 бит) и jdk 1.7.0_25.

Когда мы пытаемся запустить инструкцию 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.

Любая помощь приветствуется.

Благодарю.

  • 1
    Какую базу данных вы используете?
  • 0
    H2 не поддерживает регулярные общие табличные выражения, он поддерживает только рекурсивные CTE: h2database.com/html/advanced.html#recursive_queries
Теги:
h2

1 ответ

1

Попробуйте определить столбцы как часть определения CTE:

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

Я думаю, что некоторые базы данных требуют четких списков столбцов при использовании with.

  • 0
    Большое спасибо @Gordon Linoff ... Я смог выполнить запрос согласно вашему решению.
  • 0
    В аналогичной истории я также добавил еще один TMP2 и не смог выполнить запрос ... Не могли бы вы также помочь мне в этом? С TMP1 (REQUEST_NO) AS (ВЫБРАТЬ REQUEST_NO ОТ QUOTE) ВЫБРАТЬ TMP1.REQUEST_NO ОТ TMP1; С TMP1 (REQUEST_NO) AS (ВЫБРАТЬ REQUEST_NO ОТ QUOTE), TMP2 (AGENT) AS (ВЫБРАТЬ АГЕНТА ИЗ AGENT_TAB) ВЫБРАТЬ TMP2.AGENT ИЗ TMP2; Спасибо за вашу помощь !!!
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню