使用查询的子父关系表中的最顶层父级

时间:2016-11-23 01:34:03

标签: mysql sql db2

我有一张有父子关系的表:

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查询会给我这个想法。

1 个答案:

答案 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