我有以下查询,在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?
答案 0 :(得分:3)
以下是recursive queries使用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;
答案 1 :(得分:-1)
您必须对同一个表进行正常的内连接。
SELECT parent.id
FROM PEOPLE parent
inner join PEOPLE child on child.parent_id = parent.id
where child.person_id = {ID}