我有一张有父子关系的表:
Parent_id Child_id
1 2
1 5
2 3
2 4
5 6
7 4
7 8
8 6
关系是在孩子和直系亲属之间。
像4这样的孩子的多个父母可以是2岁和7岁的孩子
如何使用sql查询找到孩子的最顶层父母?
示例:对于3,答案必须是1
对于4,答案可以是1或7.为简单起见假设我必须返回最小的那个,即1
对于5,答案是1(因为1没有父母,因此它将被视为最顶层)
我正在使用DB2(10.5),但是一般的SQL查询会给我这个想法。
答案 0 :(得分:0)
db2中的一种可能性(对MySQL无效)
SELECT CHILD_ID, min(ROOT) as ROOT FROM (
SELECT CONNECT_BY_ROOT PARENT_ID AS ROOT, f1.*
FROM YOURTABLE f1
CONNECT BY NOCYCLE PRIOR CHILD_ID=PARENT_ID
) tmp
group by CHILD_ID