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

Oracle SQL实现同表内父子记录关联更新银行账户字段

同表自关联更新子公司银行账户方案

你之前编写的SQL报无效错误、逻辑不对的核心原因有三点:

  • 子查询未闭合、缺少必填的子查询别名,语法结构不完整
  • 字段名拼写错误:parent_company_ID误写为parent_compapny_id
  • 关联逻辑写反:原写法ci.company_id = parentco颠倒了子公司与父公司的匹配规则,正确匹配规则应为子公司的parent_company_ID字段等于父公司的company_ID字段

可直接执行的更新语句

MySQL / SQL Server / PostgreSQL 通用写法

UPDATE child
SET child.bank_acct = parent.bank_acct
FROM Company_Info child
INNER JOIN Company_Info parent 
    ON child.parent_company_ID = parent.company_ID
WHERE child.bank_acct IS NULL
  AND parent.bank_acct IS NOT NULL;

Oracle 环境适用写法

UPDATE Company_Info child
SET child.bank_acct = (
    SELECT parent.bank_acct 
    FROM Company_Info parent 
    WHERE parent.company_ID = child.parent_company_ID
      AND parent.bank_acct IS NOT NULL
)
WHERE EXISTS (
    SELECT 1 
    FROM Company_Info parent 
    WHERE parent.company_ID = child.parent_company_ID
      AND child.bank_acct IS NULL
);

更新前校验逻辑

正式执行更新前,先运行以下查询校验待更新的数据匹配关系是否符合预期,避免误更新:

SELECT 
    child.company_ID AS 子公司ID,
    child.parent_company_ID AS 关联父公司ID,
    parent.bank_acct AS 待填充父公司银行账户,
    child.bank_acct AS 子公司当前账户值
FROM Company_Info child
INNER JOIN Company_Info parent 
    ON child.parent_company_ID = parent.company_ID
WHERE child.bank_acct IS NULL
  AND parent.bank_acct IS NOT NULL;

如果查询返回的子公司、父公司对应关系和你预期完全一致,再执行更新语句即可。


执行后预期结果

更新完成后查询全表,即可得到目标数据:

company_ID, parent_company_ID, bank_acct
ABC             DEF             555444333  
DEF             <null>          555444333
GHI             <null>          123456789
MNO             GHI             123456789
PQR             DEF             555444333

该写法对数千万级以内的数据量都可以正常执行,你的数千条记录场景下性能无压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:15:40