1
これは、ノードのすべての親を見つける通常のCTEのバリエーションです。差異は共通表式(ルートが両方の列に存在しない場合)
null
の子はありません。代わりに、それは単にchild
の列には存在しません。この場合insert into t (parent, child) values (1, 2) insert into t (parent, child) values (1, 3) insert into t (parent, child) values (4, 2) insert into t (parent, child) values (2, 5) insert into t (parent, child) values (2, 6) insert into t (parent, child) values (9, 6) insert into t (parent, child) values (6, 7) insert into t (parent, child) values (6, 8) with cte as ( select child, parent, 0 as level from t where parent = 5 union all select q.child, q.parent, level+1 from t q inner join cte as c on c.parent= q.child ) select distinct parent from cte where parent <> 5
、私は
5
のためのすべての親を取得しようとすると、5
は誰の親ではないので、何も見つからなかった:
は、ここに私の試みです。私が2
のすべての親を見つけようとすると、2
が5
と6
の親であるために成功します。
これは、実行可能な階層ではありません。 2&6は子供の2倍です。私はおそらく、コピー/ペーストエラーであると考えているフィールド名を変更しました。あなたのcteは階層をbuldします、結果が好きではないかもしれません6人が最大の人口を持っていました –
私は決してそれが木ではないと言いました。子供が複数の親を持つことはできない、または親は複数の子供を持つことはできません。 – jiaweizhang
これはフリー/アドホックな階層であれば問題ありません。子供が複数の親を持つことができることに同意します(つまり、レポートはリスク分析と四半期結果に属します)。明らかに5は親ではない。 –