0
テーブルに隣接ツリーを格納します。ツリー内の各ノードのすべてのアセンダントを見つけるために、再帰的な共通テーブル式を書きました。 だから私は特定のIDを含む配列をすべて検索するPostgres
SELECT * FROM TREE;
を書くとき、私はこの取得:
id | ancestors
----+---------------
0 | {} <- ROOT
1 | {0}
2 | {0}
4 | {0}
19 | {0}
45 | {0}
3 | {0,1}
5 | {0,4}
6 | {0,4}
8 | {0,4}
11 | {0,1}
22 | {0,2}
7 | {0,4,5}
9 | {0,4,6}
私はそれぞれの固有IDの私はアレイの数を見つけたいので、ツリー内の各ノードのすべての子孫の量を取得したいですそのようなIDを含む祖先列。
私は手動でそれを行うことができますが、唯一の1つのIDについて:このクエリの
SELECT count(*) from tree
WHERE 0 = any(tree.ancestors);
、ID = 0のノードがルートである場合、それは木に私のすべてのノードの量マイナス1を与える必要があります。
私はこのような何か書き込もうとしました:
SELECT count(*) from tree
WHERE id = any(tree.ancestors)
group by id;
をしかし、それは実際には0行を返します。あなたは、各id
のためにツリー全体を検索したい