【发布时间】:2015-03-19 23:26:22
【问题描述】:
给定以下数据:
id | parent | sort
--------------------
1 | null | 0
2 | null | 1
3 | 1 | 0
4 | 1 | 1
5 | 3 | 0
6 | 5 | 0
7 | 2 | 0
我如何进行预购排序,即首先是父母,然后是孩子,然后是孙子等等...?
我要查找的排序结果是:1、3、5、6、4、2、7
如果可能的话,我想在不使用 CTE(或我能理解的 CTE)的情况下执行此操作。我现在这样做的方式只是选择每条记录并检查“向上”以查看是否有任何父母、祖父母和曾祖父母。为没有父母的记录做一些事情(最重要的项目)并让它继续直到不再有孩子的记录更有意义,对吧?
我就是想不通……
这是对我的实际查询的过度简化,但我现在正在做的是:
SELECT ..some columns ..
FROM table t
LEFT JOIN table tparent WHERE tparent.ID = t.Parent
LEFT JOIN table tgrandparent WHERE tgrandparent.ID = tparent.Parent
LEFT JOIN table tgreatgrandparent WHERE tgreatgrandparent.ID = tgrandparent.Parent
【问题讨论】:
-
你需要一个递归 CTE。
-
好吧,如果我这样做,我会这样做,但是从哪里开始呢?
-
编辑您的问题并包含您现在使用的代码。
-
我们是否保证任何孩子的
id值总是高于他们各自的父母? IE。将6s 的父级更改为7而不是5将是我们不必处理的数据集?