PostgreSQL :Цикл до тех пор, пока условие не станет истинным

Я пытаюсь написать запрос, который «зацикливается» на базе данных, начиная с указанного значения, пока условие не станет истинным. Например, предположим, что у меня есть следующие записи в примере TABLE:

id, parent, cond
1,       , True
2, 1     , False
3, 1     , False
4, 2     , False
.........

Мне нужен запрос, который принимает в качестве входных данных (, например )4, и возвращает значения 2 и 1. Процесс заключается в том, что запрос соответствует идентификатору, и если cond == False, будет смотреть на родителя (идентификатор = 2 ). Поскольку cond = False во второй строке, будет выбран «родительский» id (1 ). Глядя теперь на первую строку, поскольку cond=True, LOOP завершается и возвращает 1 и 2.

Я знаю, что запрос

SELECT parent FROM example WHERE id = 4;

создаст родительский идентификатор 2.

Итак, моя тщетная попытка создать LOOP:

WHILE (SELECT cond FROM example) = False
LOOP SELECT parent FROM example WHERE id = 4 
END LOOP;

Во-первых, это приводит к ошибке ("синтаксическая ошибка в или около 'пока'" ). Во-вторых, я не знаю, как обновлять «id» после каждой итерации.

В языке программирования, таком как Python, я мог бы использовать переменную, инициализированную до 4, а затем обновлять ее с каждой итерацией... не знаю, как сделать эквивалент в Postgres.

Дайте мне знать, если у вас возникнут вопросы или потребуется дополнительная информация. Спасибо!

5
задан David C 7 August 2012 в 06:31
поделиться