【发布时间】:2021-09-15 22:09:49
【问题描述】:
表组织(organizationId, parentId, name) 表设置(id, organizationId, settingName, settingValue)
这里是 |a,1| : a 是设置名称,1 是设置值
Organization A |a,1| |b,2| |c,3| |d,4|
Organization B |b,5|
Organization C |a,8|
Organization D |c,2|
A->B->C->D(层次结构) 现在得到组织 D 的查询应该给我 (a,8)(b,5)(c,2)(d,4)
我的查询:
with recursive cte as (
select
*, 1 as level
from
Organization
where
organizationId = 3
union ALL
select
t.*, cte.level+1
from
cte
join Organization t on
t.OrganizationId = cte.parentId )
-- select
-- ss.OrganizationId,ss.parentId, ss.settingName,ss.settingValue
-- from
select
cte.OrganizationId,
cte.ParentId,
s.settingName ,
s.settingValue,
level
from
cte
inner join Settings s on
s.organizationId = cte.OrganizationId
-- as ss group by ss.settingName
这给了我来自所有组织的设置,但我需要来自父母的最新孩子的值(如果有的话)(这应该一直持续到 ROOT 组织,自下而上的方法)
【问题讨论】:
-
是的,它给了我所有的设置,我需要从下到上的设置。所以基本上 settingName 将是唯一的,因为最新的设置将从孩子那里获取。
-
请描述获取设置的规则。为什么预期输出包含组织 A 的
(d, 4)?并以表格格式或作为插入语句提供源数据。 -
@astentx 将数据作为图像的一部分提供,它应该为组织 D 获取 (d,4) 因为它必须向上遍历根并仅获取具有最近更新的值(如果有)没有更新换旧的。
-
您有一些预定义的设置,如果节点没有此设置,您希望从节点本身或其父节点获取每个设置的值。我说的对吗?
标签: mysql parent-child jooq hierarchical-data recursive-query