Я пытаюсь написать запрос, который «зацикливается» на базе данных, начиная с указанного значения, пока условие не станет истинным. Например, предположим, что у меня есть следующие записи в примере 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.
Дайте мне знать, если у вас возникнут вопросы или потребуется дополнительная информация. Спасибо!