我需要使用表 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
请让我知道我缺少什么。
提前谢谢您
对我来说,
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>