Проблема с рекурсивным 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;