0

次のデータがあるとします。

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
4

2 に答える 2