我有以下查询,在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?
这是使用递归查询的解决方案, Oracle和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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6208 次 |
| 最近记录: |