表中的数据如下:
<表类>
ID
previous_id
价值
tbody><<tr>01 空 02 01 03号02 04 03 . . 表类>
您可以使用一个简单的JOIN来获得您直接请求的结果:
select c.id, c.prev_id, p.val
from tbl c
left join tbl p
on (c.prev_id = p.id)
order by c.id;
Lead/Lag函数失败是因为它们依赖于排序,没有什么可以保证数据中的排序id是guid。
然而,这留下了许多有待回答的问题。您已经建立了层次关系,那么结果是否需要反映这种关系?使用单个分支和id:prev_id被很好地排序,这基本上不需要额外的工作。但等级制度很少维持这样的秩序——它们往往会变得混乱。要解开它,你需要一个专门解决层次结构本身。(在Oracle中)实现这一目标的最好方法是从……连接…(见演示。既有)
select id
, prev_id
, (select val
from tbl t
where t.id = h.prev_id
)
from (select id, prev_id
from tbl
connect by prev_id = prior id
start with prev_id is null
) h;