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

标签 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”时,如何在主表上创建一个更新查询来更改状态?

最佳答案

假设当前的 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/

相关文章:

sql - 在 Postgres 查询中保留数组成员顺序

使用 LEN 对 ntext 字段进行 SQL SUM

java - 如何为 Ibatis SqlTemplateClientMap 创建自己的回调

sql - 构建一个个性化的类似 Facebook 的新闻源 : SQL, MongoDB?

sql - 如何使用postgres获取日期

MySQL函数替换列中的逗号分隔值

sql - 避免在 PostgreSQL 中被零除

sql - 在 postgresql 中使用子查询更新

perl - 使用 perl DBI 和 postgresql 的连接池

postgresql - PostgreSQL 公用表表达式中的内部联接