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

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/

10-11 10:21