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

如何用同表匹配行的idrecord更新SQL表的svun列?

SQL表更新:根据跨行匹配的idrecord填充svun列

问题描述

我有一个包含5列(Name、idrecord、un、svun、svrecord)的SQL表,表数据如下:

Nameidrecordunsvunsvrecord
John DoeJD123johndoeNULLJM123
Jane DoeJaD123janedoeNULLOR123
Olive ErrOR123oliverrNULLGH123

需求:当某行的svrecord与表中另一行的idrecord匹配时,将该行的svun列填充为匹配行的idrecord值。例如第2行的svrecord为OR123,与第3行的idrecord匹配,因此需将第2行的svun更新为OR123。

我尝试了以下SQL语句但未成功,希望得到正确写法:

UPDATE table 
SET svun = idrecord 
WHERE (svrecord = idrecord)

解决方案

原语句的问题是仅在同一行内对比svrecord和idrecord,无法实现跨行匹配。需要通过自连接将表与自身关联,找到对应的匹配行来更新。

通用标准SQL写法

适用于大多数支持标准SQL的数据库(如SQL Server、Oracle等):

UPDATE t1
SET svun = t2.idrecord
FROM your_table_name t1
JOIN your_table_name t2 ON t1.svrecord = t2.idrecord

MySQL 专属写法

MySQL的UPDATE自连接语法需要调整为:

UPDATE your_table_name t1
JOIN your_table_name t2 ON t1.svrecord = t2.idrecord
SET t1.svun = t2.idrecord

PostgreSQL 写法

除了标准写法外,也可以使用子查询实现:

UPDATE your_table_name
SET svun = (SELECT idrecord FROM your_table_name t2 WHERE t2.idrecord = your_table_name.svrecord)
WHERE EXISTS (SELECT 1 FROM your_table_name t2 WHERE t2.idrecord = your_table_name.svrecord)

注意:请将上述语句中的your_table_name替换为你实际使用的表名。

内容的提问来源于stack exchange,提问作者Dr.Prog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:15:43