Я хочу создать один запрос RECURSIVE для одной таблицы в Postgres, который в основном основан на родительском и дочернем элементах.
Вот демонстрационная таблица сотрудник с данными
id parentid managerid status
------------------------------------
3741 [null] 1709 7
3742 3741 1709 12
3749 3742 1709 12
3900 3749 1709 4
1) Если Status = 12 , то результатом будут данные, которые имеют status = 12 и все родители этого конкретный узел.
Ожидаемый результат будет:
id parentid managerid status
--------------------------------------
3741 [null] 1709 7
3742 3741 1709 12
3749 3742 1709 12
Для этого я попробовал запрос, который приведен ниже, работает нормально и дает правильный результат, даже если я изменю значение статуса, чем его работает нормально.
WITH RECURSIVE nodes AS (
SELECT s1.id, case when s1.parentid=s1.id then null else s1.parentid end parentid,s1.managerid, s1.status
FROM employees s1 WHERE id IN
(SELECT employees.id FROM employees WHERE
"employees"."status" = 12 AND "employees"."managerid" = 1709)
UNION ALL
SELECT s2.id, case when s2.parentid=s2.id then null else s2.parentid end parentid,s2.managerid, s2.status
FROM employees s2 JOIN nodes ON s2.id = nodes.parentid
)
SELECT distinct nodes.id, nodes.parentid, nodes.managerid, nodes.status
FROM nodes ORDER BY nodes.id ASC NULLS FIRST;
2) Если Status! = 12 , то результатом будут только все родительские этого конкретного узла.
Ожидаемый результат будет:
id parentid managerid status
--------------------------------------
3741 [null] 1709 7
Я хочу, чтобы запрос статуса не был равен некоторому значению.