sql - 处理所有子项时更新父记录
问题描述
我有两张表之间的主从关系,当处理完明细表的所有记录时,我需要更新主表的一个字段。
例如:
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”时,如何在主表上创建查询以更改状态?
解决方案
假设电流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;
推荐阅读
- mysql - 即使在 IN 子句中找不到也返回数据 - mysql
- javascript - 如何在 onclick 中响应特定值
- python-3.8 - 无法在 python3 中安装 face_recognition
- c# - 单击 Android 版 Google 地图中的标记单击会使方向/地图按钮消失
- shell - 在 Linux 的脚本中合并两个 ImageMagick 代码
- c++ - `delete[]` 不是 `new[]` 的对应项吗?
- c++ - 无法在 Debian Linux 中编译 C++17
- c# - “HttpContextAccessor”不包含“Session”的定义
- click - openlayers:鼠标悬停并单击标记自 6.2.0 起不起作用
- xamarin.forms - Xamarin.Forms 图像在 iOS 中不重叠的框架内有负边距