@Ivan_R2

Как написать рекурсивную функцию на PostgreSQL с дополнительным условием?

Есть таблица my_table с иерархической структурой (родитель parent_col). У каждой записи есть признак my_bool (True/False).
Чтобы подсчитать количество всех детей для записи, к примеру, 47, у которых значение my_bool = False, я использую такой запрос:
SELECT COUNT(*) FROM my_table WHERE parent_col = 47 and  my_bool IS FALSE

С этим всё понятно, запрос очень простой. Но каким образом сделать так, чтобы считало не только прямых детей, но и количество их потомков до тех пор, пока не наткнется на запись, где my_bool IS TRUE.
Т.е., запрос должен быть рекурсивным + с условием. Как это правильно сделать?
  • Вопрос задан
  • 47 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Примерно так:
WITH RECURSIVE temp1 ( "id","parent_col","description" ) AS (
    SELECT T1."id",T1."parent_col", T1."description"
        FROM my_table T1 WHERE T1."id" = 47
    UNION ALL
    SELECT T2."id", T2."parent_col", T2."description"
        FROM my_table T2 INNER JOIN temp1 ON( temp1."id"= T2."parent_col")
)
SELECT * FROM temp1 LIMIT 100

что такое my_bool совсем не понял, поэтому добавьте сами.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы