H2 中的分层查询

Hierarchical Queries in H2

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

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

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

问题是我需要此查询在 H2, but H2 does not support CONNECT BY PRIOR 中也能正常工作。因此,我如何重写上面的查询,以便它同时适用于 Oracle 和 H2?

您必须对同一个 table 执行正常的内部联接。

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

这是一个使用 recursive queries, which are supported by both Oracle and H2 的解决方案:

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;