Проблема с рекурсивным CTE в PostgreSQL

Этот запрос генерирует числа от 1 до 4.

with recursive z(q) as (
  select 1
  union all
  select q + 1 from z where q < 4
  )
select * from z;

Но если я изменю это к этому,

with x as (
  select 1 y
  ),
recursive z(q) as (
  select y from x
  union all
  select q + 1 from z where q < 4
  )
select * from z;

Это дает

ОШИБКА: синтаксическая ошибка в или около "z"

Что я тут не так сделал?

1 ответ

Решение

Я думаю, это потому, что RECURSIVE является модификатором оператора WITH, а не свойством общего табличного выражения. zтак что вы можете использовать это так:

with recursive
x as (
  select 1 y
),
z(q) as (
  select y from x
  union all
  select q + 1 from z where q < 4
)
select * from z;

sql fiddle demo

Другие вопросы по тегам