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

Oracle SQL中如何基于自连接(关联customer_po与ID)更新表

Oracle SQL自连接更新表的解决方案

这问题我之前也碰到过,用Oracle的MERGE语句就能完美解决,既简洁又能覆盖你需要的两种情况:

解决方案SQL

MERGE INTO XYZ tgt
USING (
    SELECT 
        x.ID,
        COALESCE(y.Invoice_Date, x.Invoice_Date) AS new_delivery_date
    FROM XYZ x
    LEFT JOIN XYZ y ON x.Customer_po = y.ID
) src
ON (tgt.ID = src.ID)
WHEN MATCHED THEN
    UPDATE SET tgt.Delivery_date = src.new_delivery_date;

代码解释

  • 子查询里用LEFT JOIN把每一行和它Customer_po对应的行关联起来:如果某行的Customer_po不为空,就匹配到对应ID的行;如果Customer_po是null(比如ID=123的行),LEFT JOIN会返回null。
  • COALESCE函数用来做兜底处理:如果关联到了目标行(y.Invoice_Date有值),就用关联行的Invoice Date;如果没关联到(Customer_po为null),就用当前行自己的Invoice Date。
  • MERGE INTO语句把子查询的结果和原表XYZ通过ID匹配,批量更新Delivery_date字段。

验证结果

执行完这段SQL后,你的表数据会完全符合目标输出:

ID | Invoice Date | Delivery_date | Customer_po
123 | 01-01-2018 | 01-01-2018 | null
125 | 10-01-2018 | 01-01-2018 | 123

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:29:38