分层查询使用start with子句进行连接

时间:2019-02-22 16:07:02

标签: sql oracle connect-by hierarchical-query

我正在使用的数据的排序如下例所示:

Example

我想知道的是这个

Want

我从查询中得到的是这个(带有实际数据的实际查询发布在这篇文章的结尾):

Get

这是我现在拥有的代码,我觉得快要给我我想要的东西。

从( 选择不同的ID      ,idnew      ,CONNECT_BY_ROOT idlast      ,CONNECT_BY_ISLEAF“ IsLeaf”      ,CONNECT_BY_ISCYCLE iscycle      ,级别seq_order   来自mytable tbl1   通过NOCYCLE idnew连接=先前的id  从不存在开始(从mytable tbl2中选择1                          其中tbl2.itemloadid = tbl.itemloadidnew) )abc 按abc.idlast排序,seq_order desc

我从这段代码中得到的输出是这样的:

Output

如何确保将序列的第一个值解释为根(而不是今天的叶子)?据我了解,如果将它们解释为根,则可以使用id_first而不是今天的id_last打印列。

非常感谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

您必须反转connect by子句:

select t.*, connect_by_root(id) id_first
  from mytable t 
  start with not exists (select 1 from mytable x where x.id_new = t.id)
  connect by id = prior id_new

dbfiddle demo