在PostgreSQL中获取树

在PostgreSQL中获取树

我有一个多对多关系的数据。
例如,一个主要父母可以有多个子女,而这些子女可以有多个父母。
我的主桌是

| id | name            | depth  |
---------------------------------
 1   |  top parent     |    0
 2   |  child1 of 1    |    1
 3   |  child2 of 1    |    1
 4   |  child1 of 2    |    2
 5   |  child2 of 2/3  |    2
 6   |  child1 of 5    |    3

链接表看起来像
| childId | parentId |
----------------------
    2     |    1
    3     |    1
    4     |    2
    5     |    2
    5     |    3
    6     |    5

现在我想让所有的直接父母,兄弟姐妹和直接的孩子进入。例如,对于id 5,我想得到2、3、4和6。我是新来的。如何在一个查询中完成此操作?我需要按名称和页码排列结果。

最佳答案

不需要递归查询。
直接找父母:

SELECT parent_id
FROM link
WHERE child_id = 5;
┌───────────┐
│ parent_id │
├───────────┤
│         2 │
│         3 │
└───────────┘
(2 rows)

让兄弟姐妹们:
SELECT b.child_id AS sibling_id
FROM link a
   JOIN link b USING (parent_id)
WHERE a.child_id = 5
   AND b.child_id <> 5;
┌────────────┐
│ sibling_id │
├────────────┤
│          4 │
└────────────┘
(1 row)

让孩子们:
SELECT child_id
FROM link
WHERE parent_id = 5;
┌──────────┐
│ child_id │
├──────────┤
│        6 │
└──────────┘
(1 row)

关于sql - 在PostgreSQL中获取树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42761474/

10-10 21:19