我在两个表之间具有主从关系,当处理明细表的所有记录时,我需要更新主表的一个字段。
例如:
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
查询以更改状态?
答案 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;