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

基于JOIN的行级更新:SQL Server与MySQL实现方案问询

SQL Server与MySQL实现:同步bankaccount与同document_id下的iban值

需求说明

将example_table中meta_key为bankaccount的行的meta_value,更新为同一document_id下meta_key为iban的行对应的meta_value。

更新前数据

document_idmeta_keymeta_value
1ibanIBAN123456
1bankaccountACCT987654
2ibanIBAN555555
2bankaccountACCT444444
3ibanIBAN888888
3bankaccountACCT333333

更新后预期数据

document_idmeta_keymeta_value
1ibanIBAN123456
1bankaccountIBAN123456
2ibanIBAN555555
2bankaccountIBAN555555
3ibanIBAN888888
3bankaccountIBAN888888

SQL Server 实现方案

通过自连接关联同表数据,匹配document_id并筛选对应meta_key完成更新:

UPDATE ba
SET ba.meta_value = ib.meta_value
FROM example_table ba
JOIN example_table ib 
  ON ba.document_id = ib.document_id
WHERE ba.meta_key = 'bankaccount'
  AND ib.meta_key = 'iban';

逻辑说明:

  • 用ba指代待更新的bankaccount行,ib指代对应文档的iban行
  • 基于document_id关联两行,确保更新的是同一文档下的对应值
  • 仅对meta_key为bankaccount的行执行更新操作

MySQL 实现方案

提供两种常用写法,适配不同场景:

写法一:JOIN式更新(性能更优,适合大数据量)

UPDATE example_table ba
JOIN example_table ib 
  ON ba.document_id = ib.document_id
SET ba.meta_value = ib.meta_value
WHERE ba.meta_key = 'bankaccount'
  AND ib.meta_key = 'iban';

写法二:子查询式更新(语法简洁,适合简单场景)

UPDATE example_table
SET meta_value = (
  SELECT meta_value 
  FROM example_table ib
  WHERE ib.document_id = example_table.document_id
    AND ib.meta_key = 'iban'
)
WHERE meta_key = 'bankaccount';

逻辑说明:

  • JOIN写法通过表关联直接匹配数据,执行效率更高
  • 子查询写法直接通过document_id获取对应iban值,代码更直观

内容的提问来源于stack exchange,提问作者Ebrahim Amini Sharifi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:30:09