您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Tree Structure 和Recursion

Tree Structure 和Recursion

具有查询可以完成这项工作。需要 Postgresql 或更高版本:

WITH RECURSIVE next_in_line AS (
    SELECT u.id AS unit_id, u.parent_id, a.unit_id AS acl
    FROM   unit u
    LEFT   JOIN acl a ON a.unit_id = u.id

    UNION  ALL
    SELECT n.unit_id, u.parent_id, a.unit_id
    FROM   next_in_line n
    JOIN   unit u ON u.id = n.parent_id AND n.acl IS NULL
    LEFT   JOIN acl a ON a.unit_id = u.id
    )
SELECT unit_id, acl
FROM   next_in_line
WHERE  acl IS NOT NULL
ORDER  BY unit_id

第二回合的休息条件UNIONn.acl IS NULL。这样,一旦acl找到,查询就会停止遍历树。 最后,SELECT我们只返回acl找到an 的行。瞧。

顺便说一句:使用通用的、非描述性的id作为列名是一种反模式。可悲的是,一些 ORM 认情况下会这样做。调用unit_id,您不必一直在查询中使用别名。

其他 2022/1/1 18:53:24 有405人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶