我有一个多对多关系的数据。
例如,一个主要父母可以有多个子女,而这些子女可以有多个父母。
我的主桌是
| 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/