基于4表筛选条件更新字段:将pnm.list_price乘以47%
对应的UPDATE语句实现
基于你提供的筛选条件,要将parts_master表(别名pnm)的list_price字段更新为原值的47%,可以使用如下适配Oracle语法的UPDATE语句(因原查询使用了REGEXP_LIKE函数,推测为Oracle环境):
UPDATE parts_master pnm SET pnm.list_price = pnm.list_price * 0.47 WHERE EXISTS ( SELECT 1 FROM manufacturer mfg JOIN warehouse whs ON pnm.whs_auto_key = whs.whs_auto_key JOIN stock stk ON pnm.pnm_auto_key = stk.pnm_auto_key JOIN po_detail po ON pnm.pnm_auto_key = po.pnm_auto_key WHERE pnm.mfg_auto_key = mfg.mfg_auto_key AND REGEXP_LIKE(mfg.mfg_code, '^[[:digit:]]+$') AND pnm.list_price < 3000.00 AND stk.qty_available > 0 AND pnm.list_price IS NOT NULL AND whs.warehouse_code = 'MI SKYLINE' AND po.entry_date = (SELECT MAX(entry_date) FROM po_detail) );
说明
- 用
EXISTS子query匹配原SELECT的所有筛选逻辑,确保仅更新符合要求的记录 - 若需要控制价格精度,可添加
ROUND函数,例如ROUND(pnm.list_price * 0.47, 2)保留两位小数
原SELECT查询语句的中文翻译及注释
原查询用于筛选满足以下条件的零件记录:
SELECT mfg.mfg_code, -- 制造商编码 pnm.pn, -- 零件编号 pnm.description, -- 零件描述 stk.unit_cost, -- 单位成本 stk.rec_date, -- 入库日期 whs.warehouse_code, -- 仓库编码 stk.qty_available, -- 可用库存数量 po.entry_date -- 采购单录入日期 FROM parts_master pnm JOIN manufacturer mfg ON pnm.mfg_auto_key = mfg.mfg_auto_key -- 关联制造商表 JOIN warehouse whs ON pnm.whs_auto_key = whs.whs_auto_key -- 关联仓库表 JOIN stock stk ON pnm.pnm_auto_key = stk.pnm_auto_key -- 关联库存表 JOIN po_detail po ON pnm.pnm_auto_key = po.pnm_auto_key -- 关联采购单明细表 WHERE REGEXP_LIKE(mfg.mfg_code, '^[[:digit:]]+$') -- 制造商编码为纯数字 AND pnm.list_price < 3000.00 -- 零件标价低于3000 AND stk.qty_available > 0 -- 可用库存大于0 AND pnm.list_price IS NOT NULL -- 标价不为空 AND whs.warehouse_code = 'MI SKYLINE' -- 仓库编码为'MI SKYLINE' AND po.entry_date = (SELECT MAX(po.entry_date) FROM po_detail) -- 对应最新录入的采购单
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

