oracle 9i获得给定孩子的树的最高成员

jwd*_*aan 5 sql oracle plsql connect-by oracle9i

我在Oracle 9i数据库表中有一个父子关系

喜欢:

parent | child  
1      | 2  
2      | 3
2      | 4
null   | 1
1      | 8
Run Code Online (Sandbox Code Playgroud)

我需要得到一个给定孩子的绝对父母.说,我有孩子4,它必须给我父母:1

我已经看过CONNECT BY,但我找不到解决方案.

Vin*_*rat 4

您可以使用 CONNECT BY 查询来构建父母列表,然后进行过滤:

SQL> WITH tree AS (
  2     SELECT 1 parent_id, 2 child_id FROM DUAL
  3     UNION ALL SELECT 2   , 3  FROM DUAL
  4     UNION ALL SELECT 2   , 4  FROM DUAL
  5     UNION ALL SELECT null, 1  FROM DUAL
  6     UNION ALL SELECT 1   , 8  FROM DUAL
  7  )
  8  SELECT child_id
  9    FROM (SELECT *
 10            FROM tree
 11          CONNECT BY PRIOR parent_id = child_id
 12           START WITH child_id = 4)
 13   WHERE parent_id IS NULL;

  CHILD_ID
----------
         1
Run Code Online (Sandbox Code Playgroud)