我有下表,它模拟了一个非常简单的分层数据结构,每个元素都指向其父元素:
Table "public.device_groups"
Column | Type | Modifiers
--------------+------------------------+---------------------------------------------------------------
dg_id | integer | not null default nextval('device_groups_dg_id_seq'::regclass)
dg_name | character varying(100) |
dg_parent_id | integer |
我想查询特定组的子组的递归列表。
我构造了以下递归查询,工作正常:
WITH RECURSIVE r(dg_parent_id, dg_id, dg_name) AS (
SELECT dg_parent_id, dg_id, dg_name FROM device_groups WHERE dg_id=1
UNION ALL
SELECT dg.dg_parent_id, dg.dg_id, dg.dg_name
FROM r pr, device_groups dg
WHERE dg.dg_parent_id = pr.dg_id
)
SELECT dg_id, dg_name
FROM r;
我现在想把它变成一个视图,在那里我可以选择要使用WHERE子句深入挖掘的组。这意味着我希望能够做到:
SELECT * FROM device_groups_recursive WHERE dg_id = 1;
获取id为1的组的所有(递归)子组
我能够编写一个函数(通过从上面包装查询),但我希望有一个视图而不是函数。
Side-Node:我知道邻接列表表示的缺点,我目前无法更改。