我有一个分层查询:
with temp1 as (
select distinct
b.ID,
b.LABEL,
b.parent_id
from my_table b
where b.PROG_MODIF_ID=:P225_PROG_MODIF
)
,temp2 as (
select distinct
b.ID,
b.LABEL,
p.id as p_id,
b.parent_id
from temp1 b
left join temp1 p on p.id=b.parent_id
)
select distinct
b.ID,
b.p_id,
b.LABEL,
b.parent_id
from temp2 b
start with b.p_id is null
connect by
prior b.id=b.p_id
我用这个查询得到的结果是正确的,但是它们没有按需要排序:意味着每个父节点及其下面的子节点,相反,即使“父节点-子节点”链接被指定为b.id=b.p_id
,它们也是随机排序的
编辑:查询一开始有order siblings by b.id
,但它不起作用,相反,它是排序的父母和兄弟姐妹都一样,结果是父母在中间或低于他们的孩子。编辑2:我发现问题是我在查询中使用的一个CASE,不知何故,当我添加那个CASE列时,顺序变得疯狂,当我删除它时,它工作得很好...
3条答案
按热度按时间bvn4nwqk1#
您应该能够使用
ORDER SIBLINGS BY
子句将其简化为单个分层查询:但是,如果没有minimal reproducible example,则无法进行测试。
zpqajqem2#
查询的结果集没有内在顺序。如果要对记录进行排序,则需要包含ORDER BY子句
zed5wv103#
我发现添加CASE列是我的查询中的问题,所以我在@MT0的建议后注解了它的查询,如下所示:
我还是想不出办法绕过这个案子。