回答

收藏

Tree Structure 和Recursion

技术问答 技术问答 228 人阅读 | 0 人回复 | 2023-09-12

使用 PostgreSQL 8.4.14 数据库,我有一个表示树结构,如下所示:
* p% b6 X& h9 V4 A3 P

      B: |0 E9 U( `% j% p+ W. L
  • CREATE TABLE unit  id bigint NOT NULL PRIMARY KEY,   name varchar(64) NOT NULL,   parent_id bigint,   FOREIGN KEY (parent_id) REFERENCES unit (id));INSERT INTO unit VALUES (1,'parent',NULL),(2,'child            grandchild A(、grandchild B',2); id |    name      | parent_id ---- -------------- -----------  1 | parent       |            2 | child        |     | grandchild A |     | grandchild B |     code]我想为这些单元创建一个访问控制列表,每个单元可能都有自己的 ACL,或者从最近的祖先那里继承,拥有自己的 ACL。
    ' U( ?7 v- V4 e
  • [code]CREATE TABLE acl  unit_id bigint NOT NULL PRIMARY KEY,   FOREIGN KEY (unit_id) REFERENCES unit (id));INSERT INTO acl VALUES (1),(4); unit_id ---------                 4[//code]我正在用视图来确定一个单元是否从祖先那里继承了 ACL:[code]CREATE VIEW inheriting_acl AS    SELECT u.id AS unit_id,COUNT(a.*) = 0 AS inheriting    FROM unit AS u    LEFT JOIN acl AS a ON a.unit_id = u.id    GROUP BY u.id; unit_id | inheriting --------- ------------       1 | f        | t       3 | t       4 | f
    6 z3 K; m& B4 P4 ~
我的问题是:我怎样才能得到它?不从祖先那里继承 ACL最近的单位?我的预期结果应该类似于下表/视图:7 e$ p! [6 Z# E" X* v% R# G5 O
    unit_id | acl --------- ------------       1 | 1      2             | 1      3  3                            3 3 3           3 | 1       4 4            4                4 | 4: }+ y9 J; O1 D* ^: N
               
4 A$ a2 o1 Z% E6 q9 F% e& O    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则