在数据库(id,parentid,order)中有一个树结构,其中order表示要按父级排序的值(它表示父级列表中的顺序),如何构建完整的sql查询以按后序遍历此表?
什么是post-order在wiki上有描述,尽管只针对二叉树-https://en.wikipedia.org/wiki/tree_traversal
并非所有这些方法都适用于自定义树(例如,按顺序),但post-order确实适用于:
A
/ \
B C
/|\
D E F
输出为:
B D E F C A
在sql数据表中相同:
|Id |ParentId | Order
|___|_________|______
|A |null |0
|B |A |0
|C |A |1
|D |C |0
|E |C |1
|F |C |2
我已经挣扎了很长一段时间,但似乎cte不允许内部秩序条款(天哪,为什么?!),因此,如果没有存储过程,这项任务在我当前的级别是不可能完成的。
2条答案
按热度按时间oewdyzsn1#
与其说是一个可用的答案,不如说是一个概念证明,这里有一个基于cte的版本。它使用
STRING_AGG
按顺序连接每个节点的子节点,然后用其子节点递归地替换每个节点以构建输出字符串—这意味着在节点键是彼此的子字符串的情况下,它将不起作用。xdnvmnnf2#
只需按原样实施即可找到解决方案:
到目前为止,使用cte似乎是不可能的。