使用表 B 中相同列中的值更新表 AA 中多列中的值,但前提是满足条件

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

我需要使用表 BB 中的信息更新表 AA 中的信息,但前提是 AA=ID4 与 BB=ID4 匹配。以下是当前的表格布局:

更新前:

表AA

ID1 ID2 ID3 ID4 ID5 ID6 ID7

10  11  12  13  0   0   0                    
20  21  22  23  0   0   0                     

表BB

ID1 ID2 ID3 ID4 ID5 ID6 ID7

10  11  12  13  14  15  16                    
20  21  22  23  24  25  26                     

更新后:

表AA

ID1 ID2 ID3 ID4 ID5 ID6 ID7

10  11  12  13  14  15  16                    
20  21  22  23  24  25  26                     

我构建的查询确实更新了信息,但实际上更新了所有行,而不仅仅是其中的行 AA=ID4 匹配 BB=ID4。这是我正在使用的:


UPDATE AA
   Set AA.ID5 = BB.ID5,
    AA.ID6 = BB.ID6,
    AA.ID7 = BB.ID7
From AA
Inner Join BB
        ON AA.ID4 = BB.ID4

请让我知道我缺少什么。

提前谢谢您

sql sql-server sql-update match
1个回答
1
投票

对我来说,

merge
看起来是一个不错的选择。

样本数据;请注意,我修改了

bb
表中的第二行,以便
id4
aa.id4
:

不匹配
SQL> select * From aa;

       ID1        ID2        ID3        ID4        ID5        ID6        ID7
---------- ---------- ---------- ---------- ---------- ---------- ----------
        10         11         12         13          0          0          0
        20         21         22         23          0          0          0

SQL> select * From bb;

       ID1        ID2        ID3        ID4        ID5        ID6        ID7
---------- ---------- ---------- ---------- ---------- ---------- ----------
        10         11         12         13         14         15         16
        20         21         22         99         24         25         26
                                         ^^
                                        here    

合并:仅更新一行,因为

aa.id4 = bb.id4
只有一场匹配:

SQL> merge into aa
  2    using bb
  3    on (aa.id4 = bb.id4)
  4    when matched then update set
  5      aa.id5 = bb.id5,
  6      aa.id6 = bb.id6,
  7      aa.id7 = bb.id7;

1 row merged.

结果:

SQL> select * From aa;

       ID1        ID2        ID3        ID4        ID5        ID6        ID7
---------- ---------- ---------- ---------- ---------- ---------- ----------
        10         11         12         13         14         15         16
        20         21         22         23          0          0          0

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