如果表1和表2的另一个字段匹配,则需要一些查询帮助根据表2的字段更新table1的某些列。
如果id不相同但是loc1和loc2相同而且tbl2中的upd为Y,我想用tbl2的id(分别为4321和1987)更新tbl 1的id(1234和7891)。
tbl1 tbl2
id loc1 loc2 id loc1 loc2 upd
1234 a1 b1 4321 a1 b1 Y
4567 a2 b2 4567 a2 b2
7891 a3 b3 1987 a3 b3 Y
3456 a4 b4 6543 a4 b4
答案 0 :(得分:0)
试试这个
MERGE INTO tbl1 e
USING tbl2 h
ON (e.loc1 = h.loc1 and e.loc2=h.loc2 and h.upd='Y')
WHEN MATCHED THEN
UPDATE SET e.id = h.id;
您可以保留未匹配的条款。
答案 1 :(得分:0)
如果id不相同但是loc1和loc2相同而且tbl2中的upd为Y,我想用tbl2的id(分别为4321和1987)更新tbl 1的id(1234和7891)。
您可以使用 MERGE 仅使用更新选项。如果您使用的是version 10g
及以上版本,匹配和不匹配子句可选。
表格数据
SQL> SELECT * FROM t1;
ID LO LO
---------- -- --
1234 a1 b1
4567 a2 b2
7891 a3 b3
3456 a4 b4
SQL> SELECT * FROM t2;
ID LO LO U
---------- -- -- -
4321 a1 b1
4567 a2 b2
1987 a3 b3
6543 a4 b4
现在,让我们合并 t2
使用 t1
:
SQL> MERGE INTO t2 s
2 USING t1 d
3 ON (s.loc1 = d.loc1
4 AND s.loc2 = d.loc2)
5 WHEN MATCHED THEN
6 UPDATE SET s.upd = 'Y'
7 WHERE s.ID <> d.ID;
3 rows merged.
让我们验证表T2数据:
SQL> SELECT * FROM t2;
ID LO LO U
---------- -- -- -
4321 a1 b1 Y
4567 a2 b2
1987 a3 b3 Y
6543 a4 b4 Y
因此,表T2中的三行已使用UPD
= 'Y'
进行了更新。
我假设您要根据条件更新值upd
的{{1}}列。如果您要更新其他列,只需更改开启和 WHERE 子句中的列名称。