【发布时间】:2021-06-18 12:25:08
【问题描述】:
问题
我正在努力解决 Postgres 的分层问题。
我有多层层次结构(我们假设 3 出于问题的目的)
-> category
--> subcategory
---> item
这些是不同的表,但我可以简单地将其转换为一个子父表/CTE。每个父类别可以有多个子类别。
我还有另一个表,比如说 UserPreferences,其中用户和项目之间存在关系(用户选择哪些项目作为首选项)。
我需要做的是创建一个查询,该查询将返回所有用户偏好但有一个要求,如果选择了父级下的所有节点,则应显示父级名称而不是子级列表。
示例
如果我们有以下情况:
-> category 1
--> subcategory 1
---> item 1 (selected by user)
---> item 2 (selected by user)
--> subcategory 2
---> item 3 (selected by user)
---> item 4
-> category 2
--> subcategory 3
---> item 5 (selected by user)
那么用户想要的输出是: 子类别 1,项目 3,类别 2
请注意,查询应该允许同时查询多个用户,因此函数不是一个选项。
尝试
我曾多次尝试使用以下方法编写此类查询:
- 递归 CTE - 我在编写正确条件时遇到了问题:/ 我也有点担心性能 - 如果它足够好的话
- 按 ROLLUP 分组 + 一些左侧连接以获取类别内的计数 - 但在这里我遇到了“类别 2”的情况 - 因此在我的情况下,将显示“类别 2”和“子类别 2”仅属于“第 2 类”
有没有人有什么建议最好的方法是什么?
【问题讨论】:
标签: postgresql