Sql 当结果集来自自引用表时,是否有一种按层次结构排序的方法?
我们有一个Oracle自引用表来表示类似于以下内容的层次结构:Sql 当结果集来自自引用表时,是否有一种按层次结构排序的方法?,sql,oracle,self-reference,Sql,Oracle,Self Reference,我们有一个Oracle自引用表来表示类似于以下内容的层次结构: THING --------- ID PARENT_ID NAME SOME_DATA 顶级对象有一个null父ID 我希望能够从此表中进行选择,并按照每一行在层次结构中的位置(从上到下),然后按照名称对数据进行排序,以便数据集: ID PARENT_ID NAME SOME_DATA 1 null top null 2 1 cat null 3 1
THING
---------
ID
PARENT_ID
NAME
SOME_DATA
顶级对象
有一个null
父ID
我希望能够从此表中进行选择,并按照每一行在层次结构中的位置(从上到下),然后按照名称对数据进行排序,以便数据集:
ID PARENT_ID NAME SOME_DATA
1 null top null
2 1 cat null
3 1 dog null
4 2 frog null
5 1 bird null
6 2 fish null
。。。变成:
ID PARENT_ID NAME SOME_DATA
1 null top null
5 1 bird null
2 1 cat null
6 2 fish null
4 2 frog null
3 1 dog null
当我开始输入这个问题时,我很好奇是否有办法在不向表中添加LEVEL
列的情况下执行此操作,但现在我甚至不确定是否可以通过添加该列来完成
“否”的回答在这里是完全可以接受的,因为我已经接受了一个事实,那就是我必须在Java代码中这样做。与其使用
级别
并试图以一种巧妙的方式管理结果,不如使用从
开始,并按
顺序排列兄弟姐妹,以获得您想要的结果:
:
| ID | PARENT_ID | NAME | SOME_DATA |
-------------------------------------
| 1 | (null) | top | (null) |
| 5 | 1 | bird | (null) |
| 2 | 1 | cat | (null) |
| 6 | 2 | fish | (null) |
| 4 | 2 | frog | (null) |
| 3 | 1 | dog | (null) |
这将贯穿整个层次结构,从根开始(
parent\u id为NULL
),并对结果进行排序。Wow。谢谢那是一些严肃的神谕绝地武士的东西。
| ID | PARENT_ID | NAME | SOME_DATA |
-------------------------------------
| 1 | (null) | top | (null) |
| 5 | 1 | bird | (null) |
| 2 | 1 | cat | (null) |
| 6 | 2 | fish | (null) |
| 4 | 2 | frog | (null) |
| 3 | 1 | dog | (null) |