我有两个表之间的主明细关系,在处理明细表的所有记录时需要更新主表的一个字段。
例如:
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
查询以更改状态?. 最佳答案
假设电流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;
关于sql - 处理所有子项时更新父记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54187424/