我正在尝试将专有的 OracleCONNECT BY
查询转换为将在 H2 上运行的标准 SQL 查询,并以相同的顺序生成相同的数据。
这是 Oracle 查询,它有效:
SELECT id, name, parent
FROM myschema.mytable
START WITH id = 1
CONNECT BY PRIOR id = parent
这就是我想出的 - 但是,它在ResultSet
.
WITH RECURSIVE T(id, name, parent, path) AS (
SELECT id, name, '' AS parent, id AS path
FROM myschema.mytable WHERE id = 1
UNION ALL
SELECT ou.id, ou.name, ou.parent,
(T.path + '.' + CAST (ou.id AS VARCHAR)) AS path
FROM T INNER JOIN myschema.mytable AS ou ON T.id = ou.parent
) SELECT id, name, parent FROM T ORDER BY path
初始行和相关行都存在于表中。
我没有使用 H2 的 Oracle 兼容模式(顺便说一下,它不支持 CONNECT BY)。