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

基于同表另一列主键值更新指定列的SQL实现问题

SQL实现方案

你给出的表结构存在同表列名重复的问题(前、后两个列都命名为id),不符合数据库设计规范,我们先按逻辑给三个列做命名约定,你可以替换为你实际的列名:

  • 第一列主键列:id
  • 第二列待更新字段:topic_id
  • 第三列关联主键列:related_id(对应你需求中存储关联主键id的第三列)

通用更新语句(适配MySQL、PostgreSQL等多数数据库)

-- 全表更新所有符合关联条件的行
UPDATE 表名 t1
JOIN 表名 t2 ON t1.related_id = t2.id
SET t1.topic_id = t2.topic_id
WHERE t1.topic_id IS NULL;

如果仅需要更新示例中的id=2的行,可以追加过滤条件:

UPDATE 表名 t1
JOIN 表名 t2 ON t1.related_id = t2.id
SET t1.topic_id = t2.topic_id
WHERE t1.id = 2;

SQL Server 适配写法

UPDATE t1
SET t1.topic_id = t2.topic_id
FROM 表名 t1
JOIN 表名 t2 ON t1.related_id = t2.id
WHERE t1.id = 2;

Oracle 适配写法

UPDATE 表名 t1
SET t1.topic_id = (SELECT t2.topic_id FROM 表名 t2 WHERE t2.id = t1.related_id)
WHERE t1.id = 2
AND EXISTS (SELECT 1 FROM 表名 t2 WHERE t2.id = t1.related_id);

如果你实际业务中第三列确实和第一列重名为id,只需要把上述语句中的related_id替换为t1.id,通过表别名即可区分两个重名列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:06