所以我完全无法解决这个SQL查询。
我有一个树状结构中的产品类别表。为简化起见,假设有3个顶级类别:A,B,C。在它们上方还有一个类别(“全部”)是根类别。无法将任何产品分配给该类别。为了区分无法分配给产品的类别,它们的类型为“摘要”,而不是“具体”]
每个类别可以具有任意数量和深度的子类别。我当前正在使用父ID将这些ID存储到直接父(邻接列表)。
Categories
Category Parent Type
All None Abstract
A All Concrete
B All Concrete
C All Concrete
D A Concrete
E D Concrete
F B Concrete
G F Concrete
H C Concrete
I C Concrete
我还有另一个带有类别字段的产品表。该表中出现的唯一类别是顶级类别。即。 A,B或C。
Products
Part Number Category
XXXX-XXXX A
XXXX-YYYY A
XXXX-ZZZZ B
YYYY-XXXX C
我想创建一个将两个表连接起来的查询,以创建将类别替换为子类别的行。即。从伪代码的角度来看,基本上可以加入category =,前提是category等于或等于category的后代。
所以类似:
select * from products inner join categories on products.category = descendent of category
将导致:
Part Number Category XXXX-XXXX E (E's top level concrete parent is A) XXXX-YYYY E (E's top level concrete parent is A) YYYY-XXXX H (H's top level concrete parent is C) YYYY-XXXX I (I's top level concrete parent is C)
我具有检索到顶层的所有具体类型的方法:
with recursive concrete_parents as ( select category, parent, type from categories where category in ('E', 'H', 'I') UNION ALL select t2.category, t2.parent, t2.type from categories as t2 inner join concrete_parents t1 on t1.parent = t2.category where t2.type = 'Concrete' ) select distinct * from concrete_parents order by parent;
我不知道如何将它与主表上的内部联接结合起来?
我正在考虑的另一种选择是使用Postgres ltree,但是我不太熟悉。
有什么想法吗?
所以我完全无法解决这个SQL查询。我有一个树状结构中存在的产品类别表。为简单起见,假设有3个顶级类别:A,B,C。...
我想你想要这样的东西:
所以我相信这是可行的: