You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于emp_source表实现emp_des表的INSERT/UPDATE/DELETE操作求助

分场景处理目标表的更新与删除标记

一、处理源表更新的记录

你之前的UPDATE导致全表标识变'U',核心问题是没加精准的关联和过滤条件。要只更新源表中已修改的对应目标记录,用JOIN关联两张表的ID(假设ID是唯一主键),再过滤出字段有变化的行:

UPDATE emp_des d
JOIN emp_source s ON d.ID = s.ID
SET 
    d.DESIG = s.DESIG,
    d.NAME = s.NAME, -- 如果NAME也可能被修改则保留,否则删除此行
    d.META_UPD_DT = CURRENT_TIMESTAMP, -- 替换为对应数据库的时间函数,比如SQL Server用GETDATE()
    d.META_IUD_FLG = 'U'
WHERE 
    -- 只更新实际有变化的记录,避免无意义操作
    d.DESIG <> s.DESIG 
    OR d.NAME <> s.NAME; -- 同上,不需要则删除此行

二、处理源表删除的记录

要标记目标表中源表已不存在的记录,用NOT EXISTS筛选出这些行,再更新元数据字段:

UPDATE emp_des d
SET 
    d.META_UPD_DT = CURRENT_TIMESTAMP,
    d.META_IUD_FLG = 'D',
    d.CURRENT_FLAG = FALSE
WHERE 
    NOT EXISTS (SELECT 1 FROM emp_source s WHERE s.ID = d.ID)
    AND d.CURRENT_FLAG = TRUE; -- 只处理当前有效的记录,避免重复标记

新手必备注意事项

  1. 先查后更:执行UPDATE前,先用SELECT验证要修改的行,比如:
    -- 验证要更新的源表修改记录
    SELECT d.*, s.DESIG AS new_desig 
    FROM emp_des d JOIN emp_source s ON d.ID=s.ID 
    WHERE d.DESIG <> s.DESIG;
    
  2. 主键关联:必须用唯一标识(比如ID)关联两张表,否则会误更新无关行
  3. 时间函数适配:不同数据库的当前时间函数不同,比如Oracle用SYSTIMESTAMP,按需替换

内容的提问来源于stack exchange,提问作者TrenT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:55:10