更新表并连接到第二个表

时间:2019-05-02 20:58:54

标签: sql oracle

我正尝试使用表2中的“ ID”列中的值更新表1中的“ ID”列中的值-仅当它们不匹配时。我想我除了set语句外什么都有。

我想知道这是否是解决此问题的最佳方法,以及如何格式化此类问题的子查询

update table1 B
set B.id = (select A.id
                    from table2 A 
                    where  B.num = A.num
                    and B.name = A.name)
where B.num = A.num
and B.name = A.name
and B.id <> A.id
;

3 个答案:

答案 0 :(得分:1)

也许是这样吗?

update B
set B.id=A.Id
from table1 B
  join table2 A
    on B.num=A.num
   and B.name=A.name
   and B.id<>A.id

答案 1 :(得分:0)

Oracle在更新中不支持join。但是您可以使用两个子查询:

update table1 B
    set id = (select A.id
              from table2 A 
              where B.num = A.num and
                    B.name = A.name
             )
    where exists (select A.id
                  from table2 A 
                  where B.num = A.num and
                        B.name = A.name and
                        B.id <> A.id
                 );

答案 2 :(得分:0)

使用MERGE命令。

这是一个基本示例:

    MERGE INTO table1 a
    USING (SELECT bb.asdf,cc.zxcv
           from table2 bb,table3 cc
           where bb.field1=cc.field1) b
    ON (a.asdf=b.asdf)
    WHEN MATCHED THEN
    UPDATE SET a.zxcv=b.zxcv;