我正在使用 MS SQL Server。我有 2 张桌子:
示例
对象_id | Prop_id | 价值 |
---|---|---|
1 | 55 | 980 |
1 | 76 | |
2 | 55 | 970 |
2 | 76 | |
3 | 55 | 960 |
3 | 76 |
数字 | 姓名 |
---|---|
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 值)。
一步步写查询会更容易
首先需要从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