首页 > 解决方案 > 处理所有子项时更新父记录

问题描述

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

例如:

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通过一个持久的过程来填充(即一个人在一个盒子里装满产品时改变一条记录的状态,然后在填充完所有相关的盒子后一段时间后改变另一条记录的状态等等到卡车),我需要通过查询主表来了解进程的全局状态。

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

标签: sqlpostgresql

解决方案


假设电流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;

推荐阅读