首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgresql雇员继承丢失值的管理器数据。

postgresql雇员继承丢失值的管理器数据。
EN

Stack Overflow用户
提问于 2022-06-13 12:41:48
回答 1查看 44关注 0票数 2

我正在尝试编写SQL来填充员工缺少的值。经理也是雇员。员工缺少的值可以从经理那里继承,如果员工的经理没有值,那么将查找经理的管理器(如果需要,必须查找根管理器,直到我们得到值为止)。

下面是表和数据

代码语言:javascript
复制
create table employee(
employee_id int primary key,    
name text,
manager_id int,
department text,
lob text);

insert into employee
(employee_id,name,manager_id,department,lob)
values
(12,'a',null,'IT','BFI'),
(3,'b',12,'sales',null),
(4,'c',3,null,'Banking'),
(6,'d',12,null,null),
(7,'e',4,null,null),
(10,'f',7,null,null);

样本数据为这里

示例: employee_id=4有department = null和manager_id=3和lob=Banking,这里的部门对于这个雇员来说是空的,所以查询必须从雇员的经理继承department值。

雇员id=4的经理是3,有部门=销售部。现在,员工4的预期结果是

类似地,必须继承lob列的值来替换每个员工的空值。

示例:员工10和他的经理7都没有departmentlob值,但是employee/manger 7有经理4,经理4有lob value Banking,department value sales继承他的经理。因此,员工10和员工7将继承departmentlob的销售和银行价值。员工10的预期结果是

我的疑问

代码语言:javascript
复制
with RECURSIVE inherit_parent_values as (
select * from employee
where employee_id=10
union
select e.manager_id,p.name,p.manager_id,
coalesce(e.department,p.department),
coalesce(e.lob,p.lob)
from employee p inner join
inherit_parent_values e 
ON e.manager_id=p.employee_id)

select * from inherit_parent_values

尝试使用递归查询,但这将使所有管理人员行上升到每个员工的根级别,而不是每个员工的一行。

还必须在列级别获得null值。看来合并在我的查询中没有用

在PostgreSQL中可以从经理中填充employee空值吗?

预期结果是

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-13 13:06:44

demo: db<>fiddle

你做的是自下而上的(从叶开始--一个雇员),我会自上而下地(从根开始--一个高级经理):

代码语言:javascript
复制
WITH RECURSIVE rec AS (
    SELECT *
    FROM employee
    WHERE manager_id IS NULL
    
    UNION
    
    SELECT 
        e.employee_id,
        e.name,
        e.manager_id,
        COALESCE(e.department, r.department) as department,
        COALESCE(e.lob, r.lob) as lob
    FROM employee e
    JOIN rec r ON r.employee_id = e.manager_id
)
SELECT * FROM rec
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72603034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档