从其他表更新一个表的值

时间:2017-11-22 07:51:52

标签: sql oracle

例如,我有2个表

表1:

id    number     name
-----------------------
1     1684       abc
2     9666       pqr
3     1234       adf

表2:

id    number     name
-----------------------
1     9109       xyz
2     9564       pqr

我如何获得这样的输出?

表1:

id    number     name
-----------------------
1     9109       xyz
2     9564       pqr
3     1234       adf

我想在表格中合并表格2。 此外,如果列 - “名称”值从此合并更新/更改,我需要更新状态列,我需要调用smtp邮件的过程,我该如何处理? 状态列具有不同的状态转换(例如:x-> y,a-> b)。 如果记录不在table1中,则应插入。

这些操作都在批处理作业中使用的过程中。

请告诉我这个。 提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

有不同的方法可以做到这一点,比如使用MERGE语句,但最简单的是

Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 

SQL> create table t$1 ("id" integer, "number" integer, "name" varchar2(3));

Table created

SQL> create table t$2 ("id" integer, "number" integer, "name" varchar2(3));

Table created

SQL> insert into t$1 values (1, 1684, 'abc');

1 row inserted

SQL> insert into t$1 values (2, 9666, 'pqr');

1 row inserted

SQL> insert into t$1 values (3, 1234, 'adf');

1 row inserted

SQL> insert into t$2 values (1, 9109, 'xyz');

1 row inserted

SQL> insert into t$2 values (2, 9564, 'pqr');

1 row inserted

SQL> update t$1 set
  2    ("number", "name") = (select "number", "name" from t$2 where t$2."id" = t$1."id")
  3  where
  4    "id" in (select "id" from t$2);

2 rows updated

SQL> select * from t$1;

      id   number name
-------- -------- --------
       1     9109 xyz
       2     9564 pqr
       3     1234 adf

答案 1 :(得分:0)

您可以使用MERGE非常简单地执行此操作:

MERGE INTO table1 dst
USING table2 src
ON    ( src.id = dst.id )
WHEN MATCHED THEN
  UPDATE SET number = src.number,
             name   = src.name;