递归postgres查询查看

时间:2017-07-07 15:51:01

标签: postgresql recursion

我有下表,它模拟了一个非常简单的分层数据结构,每个元素都指向其父元素:

                                     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:我知道邻接列表表示的缺点,我目前无法更改。

0 个答案:

没有答案