【发布时间】:2021-06-06 16:44:21
【问题描述】:
假设我有以下数据。
CREATE TABLE ORDERS(
id INT PRIMARY KEY,
category TEXT,
subcategory TEXT,
description TEXT
);
INSERT INTO TABLE ORDERS VALUES
(1001, "CAT1" "SUBCAT1" "DESC1"),
(1002, "CAT1" "SUBCAT1" "DESC2"),
(1003, "CAT1" "SUBCAT2" "DESC3"),
(1004, "CAT1" "SUBCAT2" "DESC4"),
(1005, "CAT1" "SUBCAT2" "DESC5"),
(1006, "CAT2" "SUBCAT3" "DESC6"),
(1007, "CAT2" "SUBCAT3" "DESC7"),
(1008, "CAT2" "SUBCAT4" "DESC8"),
我收到了生成一个包含单列的表的请求,其中类别和子类别的排列方式如下所示。
result
-------------
CAT1
-> SUBCAT1
-> DESC1
-> DESC2
-> DESC3
-> SUBCAT2
-> DESC4
-> DESC5
CAT2
-> SUBCAT3
-> DESC6
-> DESC7
-> SUBCAT4
-> DESC8
我不明白如何按照我的客户(尤其是第一个)建立的要求完成任务。它们是:
- 我应该使用两个新列:
-
parent:引用父级类别。 -
seq_orders: 构建序列
-
- 我应该使用窗口函数和递归查询来构建树状列
我希望从外面看到这个的人可以提供一些帮助。
谢谢!
编辑
有必要(以某种方式)按照客户的要求遵循此流程:
- 创建列
parent以引用更高级别的类别。更高级别的类别会将此字段设为空。 - 创建一个名为
seq_orders的序列,该序列从 1 开始并增加一个单位。 - 使用上述顺序将级别1(类别字段)和级别2(子类别字段)的不同级别插入到表中以分配不同的
ids。在级别 2 和级别 3 中,parent字段必须指向相应的更高级别的类别。 - 删除冗余字段类别和子类别。
【问题讨论】:
标签: sql postgresql recursion