如何根据键和前一个键关联行,而不需要多个连接



表中的数据如下:

<表类> ID previous_id 价值 tbody><<tr>01空020103号020403..

您可以使用一个简单的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;

最新更新