考虑Oracle中的下表
sortOrder thisID levelNo
------------------- ------------------- ---------------------
1 A 0
2 B 1
3 C 1
4 D 2
5 E 3
6 F 3
7 G 1
8 H 0
9 I 1
可以在视觉上看作
A
B
C
D
E
F
G
H
I
如何确定子父关系,输出以下内容?该关系基于sortOrder和levelNo。
thisID parentID
------------------- ---------------------
A A
B A
C A
D C
E D
F D
G A
H H
I H
我熟悉使用查询来根据分层的父子关系来确定级别,但是却没有找到一种方法来反过来。
答案 0 :(得分:1)
请尝试
SELECT
T.thisID
, CASE T.levelNo
WHEN 0
THEN T.thisID
ELSE (
SELECT thisID FROM Table1
WHERE sortOrder = (
SELECT MAX(sortOrder) FROM Table1
WHERE (levelNo = T.levelNo - 1)
AND sortOrder < T.sortOrder
)
)
END parent
FROM Table1 T
ORDER BY sortOrder;
查看实际操作:SQL Fiddle。
如果需要进一步的细节/调整,请发表评论。