H2中的分层查询

时间:2016-05-10 12:08:42

标签: sql oracle h2

我有以下查询,在Oracle中可以正常工作:

SELECT ID
FROM PEOPLE
  START WITH ID = <person_id> 
  CONNECT BY PRIOR PARENT_ID = ID;

这适用于包含人员的自引用表。它找到了一个人所有祖先的ids。

问题是我需要此查询才能在H2中使用,但H2 does not support CONNECT BY PRIOR。因此,如何重写上述查询以使其适用于Oracle和H2?

2 个答案:

答案 0 :(得分:3)

以下是recursive queries使用OracleH2支持的解决方案:

WITH ancestors(ID, PARENT_ID) AS 
(
  SELECT ID, PARENT_ID FROM PEOPLE WHERE ID = <person_id>
    UNION ALL
  SELECT S2.ID, S2.SCHEDULE_PARENT_ID FROM ancestors S1 INNER JOIN EFP.COLLATERAL_SCHEDULE S2 ON S1.SCHEDULE_PARENT_ID = S2.ID
)
SELECT ID FROM ancestors;

答案 1 :(得分:-1)

您必须对同一个表进行正常的内连接。

SELECT parent.id
FROM PEOPLE parent
inner join PEOPLE child on child.parent_id = parent.id
where child.person_id = {ID}
相关问题