使用しているDBは、Postgresql バージョン12です。
レコードに親子関係を持たせて、子が存在するかどうかを判定したいのですが、正常に判定出来ません。
親子関係の条件は、
レコード(仮にA)の[親ID]列の値が他のレコード(仮にB)の[ID]列の値と一致し、Aの階層がBの階層+1になっていれば、
AをBの子とみなし、Bの[子あり]をtrueとする。
という条件です。
ID | 親ID | 階層 |
---|---|---|
10 | null | 1 |
11 | 10 | 2 |
12 | 10 | 2 |
13 | null | 1 |
現在、動かないクエリ
SELECT id, 親id, 階層, (SELECT count(t1.id) > 0 FROM myTable t1 INNER JOIN myTable t2 ON t1.id = t2.親id WHERE t1.id = t2.親id AND (t1.階層 = (t2.階層 - 1)) as 子あり FROM myTable;
欲しい結果
ID | 親ID | 階層 | 子あり |
---|---|---|---|
10 | null | 1 | true |
11 | 10 | 2 | false |
12 | 10 | 2 | false |
13 | null | 1 | false |
現在の結果
どうやっても全レコードが一括でtrueかfalseになってしまいます。
ID | 親ID | 階層 | 子あり |
---|---|---|---|
10 | null | 1 | true |
11 | 10 | 2 | true |
12 | 10 | 2 | true |
13 | null | 1 | true |
欲しい結果を得るにはどうすればよいでしょうか?
回答2件
あなたの回答
tips
プレビュー