根据table2中的数据更新表1上的行

时间:2015-07-08 10:05:33

标签: oracle sql-update

如果表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   

2 个答案:

答案 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 子句中的列名称。