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

MS SQL Server中通过UPDATE SELECT更新表的问题求助

正确更新Table1中Prop_id=76的Value字段

问题原因

你的原SQL语句错误在于:子查询name1未与要更新的Table1行建立关联,导致SQL Server仅取子查询结果的第一条记录值,批量覆盖所有Prop_id=76的行。

解决方案

可以通过自连接Table1的方式,关联同一个Object_id下Prop_id=55的行,再匹配Table2获取对应的Name值:

UPDATE t1_update
SET t1_update.Value = t2.Name
FROM Table1 t1_update
-- 关联同Object_id下Prop_id=55的参考行
JOIN Table1 t1_ref ON t1_update.Object_id = t1_ref.Object_id
-- 关联Table2获取对应的Name值
JOIN Table2 t2 ON t1_ref.Value = t2.NUM
WHERE t1_update.Prop_id = 76
  AND t1_ref.Prop_id = 55

也可以使用CTE(公共表表达式),逻辑更直观:

WITH ObjectPropRef AS (
    -- 提前提取所有Object_id对应的Prop_id=55的Value
    SELECT Object_id, Value AS NumValue
    FROM Table1
    WHERE Prop_id = 55
)
UPDATE t1
SET t1.Value = t2.Name
FROM Table1 t1
JOIN ObjectPropRef ref ON t1.Object_id = ref.Object_id
JOIN Table2 t2 ON ref.NumValue = t2.NUM
WHERE t1.Prop_id = 76

核心逻辑

两种写法的本质都是:

  1. 定位每个Object_id下Prop_id=55的行,获取用于匹配Table2的NUM值
  2. 将同一Object_id下Prop_id=76的行的Value,替换为Table2中对应的Name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:17:55