通过 UPDATE SELECT 更新表时出现问题

问题描述 投票:0回答:1

我正在使用 MS SQL Server。我有 2 张桌子:

  1. 表1 它存储有关单个对象编号 (Object_id)、其属性编号 (Prop_id) 以及该属性的值 (Value) 的信息。

示例

对象_id Prop_id 价值
1 55 980
1 76
2 55 970
2 76
3 55 960
3 76
  1. 表 2。该表包含对象属性的值。
数字 姓名
980 ABC
970 防御
960 HIJ

我需要使用表 2 中的值更新表 1。我需要将索引为 76 的属性的“名称”放入“值”列中。两个表的连接应通过属性 55 的“值”字段进行连接表 1 中的“Num”和表 2 中的“Num”。

最后,我想得到这个:

对象_id Prop_id 价值
1 55 980
1 76 ABC
2 55 970
2 76 防御
3 55 960
3 76 HIJ

请帮我编写一个查询,以给出所需的结果!

我已经尝试了几个 SQL 查询,但它们要么根本不更新表,要么只替换数据样本中的第一个值。我的尝试:

UPDATE Table1
 SET Table1.Value = name1.name
 FROM (SELECT Table2.name FROM Table1 
 JOIN Table2 ON Table2.num = Table1.Value AND Table1.Prop_id = 55) AS name1
 WHERE Table1.Prop_id = 76

此尝试更新表中的值,但仅将 SELECT 查询中的第一个值插入到所有行中(即属性为 76 的所有行中的 ABC 值)。

sql sql-server sql-update sql-server-2008-r2
1个回答
1
投票

一步步写查询会更容易

首先需要从Table2链接到Table1获取值

select *
from   Table1 t1
       inner join Table2 t2  on t1.Value = t2.NUM
对象_id Prop_id 价值 数字 姓名
1 55 980 980 ABC
2 55 970 970 防御
3 55 960 960 HIJ

您将从

Object_id
 获得 
Name
 与关联 
Table2

接下来,您将其加入回

Table1
进行更新

select *
from   Table1 t1
       inner join Table2 t2  on t1.Value = t2.NUM
       inner join Table1 t1u on t1.Object_id = t1u.Object_id
where  t1u.Prop_id = 76
对象_id Prop_id 价值 数字 姓名 对象_id Prop_id 价值
1 55 980 980 ABC 1 76
2 55 970 970 防御 2 76
3 55 960 960 HIJ 3 76

验证结果是你想要的,只需将查询更改为

update
查询

update t1u
set    Value = t2.Name
from   Table1 t1
       inner join Table2 t2  on t1.Value = t2.NUM
       inner join Table1 t1u on t1.Object_id = t1u.Object_id
where  t1u.Prop_id = 76

你会得到你想要的结果

Table1

© www.soinside.com 2019 - 2024. All rights reserved.