我使用的是MS SQL Server.我有两张桌子:

Table1存储关于单个对象编号(Object_id)、其属性编号(Prop_id)和该属性的值(Value)的信息.

示例

Object_id Prop_id Value
1 55 980
1 76
2 55 970
2 76
3 55 960
3 76

Table 2包含对象属性的值:

NUM Name
980 ABC
970 DEF
960 HIJ

我需要用表2中的值更新表1.我需要在索引为76的属性的"Value"列中放入"name".两个表的连接应由表1中属性55的"值"字段和表2中的"Num"字段连接.

最后,我想要得到的是:

Object_id Prop_id Value
1 55 980
1 76 ABC
2 55 970
2 76 DEF
3 55 960
3 76 HIJ

请帮我写一个能给出想要的结果的查询!

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

我的try 是:

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

此try 更新表中的值,但只将SELECT查询中的第一个值插入所有行(即,属性为76的所有行中的ABC值).

推荐答案

如果您一步一步地编写查询,就会更容易

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

select *
from   Table1 t1
       inner join Table2 t2  on t1.Value = t2.NUM
Object_id Prop_id Value NUM Name
1 55 980 980 ABC
2 55 970 970 DEF
3 55 960 960 HIJ

您将从Table2中获得Object_id与Associates Name的值

接下来,将其连接回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
Object_id Prop_id Value NUM Name Object_id Prop_id Value
1 55 980 980 ABC 1 76 null
2 55 970 970 DEF 2 76 null
3 55 960 960 HIJ 3 76 null

验证结果是否符合您的要求,只需将查询更改为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分钟内得到你想要的结果

Sql相关问答推荐

Postgresql -如何计算刷卡和刷卡时间

如何更改函数返回的列名?

我如何计算字母a出现的字符串的次数?

我希望以正确的升序获取SQL结果.怎样才能得到它们?

如果元素包含通过SQL指定的字符串,则过滤掉数组元素

从数据库中查找总和大于或等于查询中的数字的数字

根据时间、状态和相关行在PostgreSQL中的存在来删除行

使用与JOIN一起使用的查询后进行分页和排序

根据标识符将两行合并为一行

group by 并根据同表中其他列的某些条件获取 group by 中的某一列值

如何使用最后一个非 NULL 值在 PostgreSQL 列中填充 NULL 值

特殊条件计算小计

避免在SQL中使用具有相同条件的多个子查询

如何将输出转换为二维格式?

批量更改WooCommerce中所有产品的税收状态

如何根据与 BigQuery 中另一个表的匹配更新一个表中的列?

Select 给定类别列表(或更多类别)中的所有事物

在 SQL 的每行选项中 Select 最大值

在 Microsoft SQL Server 中,如何只为特定值保留不同的行?

遍历数据,计算每个月最后三天的总和