处理所有子项时更新父记录

时间:2019-01-14 18:47:55

标签: sql postgresql

我在两个表之间具有主从关系,当处理明细表的所有记录时,我需要更新主表的一个字段。

例如:

create table master(idmaster serial not null, 
status varchar(10) default 'CREATED', 
primary key(idmaster));

create table detail(iddetail serial not null, 
idmaster integer references master(idmaster),
status varchar(10) default 'REGISTERED',
primary key(iddetail));

然后detail表的记录将经过一个长期的过程(即,当一个盒子里装满产品时,一个人会更改记录的状态,然后一段时间后,它会更改另一个记录的状态,并且等等,然后填写与卡车相关的所有框),我只需要查询主表即可了解该流程的全局状态。

当明细表的所有元素都包含值“ FILLED”时,如何在主表上创建update查询以更改状态?

1 个答案:

答案 0 :(得分:1)

假设当前的idmaster例如是123:

update master
set status = case
    when exists(
        select 1
        from detail
        where idmaster = 123
        and status <> 'FILLED')
    then 'IN PROCESS'
    else 'COMPLETED'
    end
where idmaster = 123;