【发布时间】:2021-11-29 06:39:27
【问题描述】:
我正在努力为 PostgreSQL 编写查询。该表类似于一棵树,每个项目都可以有 n 个子项。 我只想获取树的给定元素的最低级别的所有子节点(它们本身没有任何子节点)。
结构:
CREATE TABLE items
(
ikey integer NOT NULL,
description character varying(255),
parent integer,
CONSTRAINT i_pk PRIMARY KEY (ikey),
CONSTRAINT i_relation FOREIGN KEY (parent)
REFERENCES items (ikey) MATCH SIMPLE
)
表格的某些值如下所示:
1 "Products" NULL --Parent
2 "Metal" 1
3 "Nails" 2
4 "Chains" 2
5 "Bicycle Chains" 4
6 "Shimano Bicycle Chains" 5
7 "Shimano Bicycle Chains" 5
8 "7mm chain, black" 4
9 "Wood" 1
10 "Cutting Boards" 8
11 "Cutting Board Holder" 8
SO 上的大多数解决方案都处理只有 1-2 层的不太深的树。或者知道孩子需要从哪个父母那里获得。
我想选择“Chains” (4) 的所有子项,结果如下:
6 "Shimano Bicycle Chains" 5
7 "Shimano Bicycle Chains" 5
8 "7mm chain, black" 4
说实话,递归查询并不是我的强项。我已经有了颠倒搜索的想法-首先获取所有从未用作父母的项目然后再下降,但这只会将问题再次转移到我必须从给定的父母递归下降的地步,这似乎有点在顶部。
【问题讨论】:
-
我不明白你是想要所有的孩子,还是只想要叶子的孩子。似乎应该包括“10 - 切菜板”,但它不在您的列表中。
标签: sql postgresql