H2中的分层查询

Vla*_*zki 4 sql oracle h2

我有以下查询,在Oracle中运行良好:

SELECT ID
FROM PEOPLE
  START WITH ID = <person_id> 
  CONNECT BY PRIOR PARENT_ID = ID;
Run Code Online (Sandbox Code Playgroud)

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

问题是我需要这个查询也能在H2中工作,但H2 不支持CONNECT BY PRIOR。因此,如何重写上述查询,使其同时适用于 Oracle 和 H2?

Vla*_*zki 5

这是使用递归查询的解决方案, 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;
Run Code Online (Sandbox Code Playgroud)