oracle更新匹配多个列

时间:2014-02-04 19:31:02

标签: oracle

我是Oracle SQL的新手,在编写以下查询时需要一些帮助。任何指导将不胜感激。我不确定我是否会沿着正确的道路走下去。

我有两个表t1和t2。 t1包含四个字段f1 ... f4。 t2包含相同的四个字段。我需要分别用t2.f1和t2.f4的值更新t1.f1和t1.f4,其中t1.f2 = t2.f2和t1.f3 = t2.f3。如果存在与这些条件不匹配的行,则不应更新该行。

我是在正确的道路上还是完全失去了?

UPDATE t1 
SET (t1.f1=t2.f1, 
     t1.f4=t2.f4)
FROM t1
INNER JOIN (SELECT  t2.f1, t2.f4 FROM t2) 
ON t1.f2=t2.f2 AND t1.f3=t2.f3
WHERE EXISTS (SELECT t2.f1, t2.f4
              FROM t2
              WHERE t1.f2=t2.f2 AND t1.f3=t2.f3);

2 个答案:

答案 0 :(得分:0)

如果使用MERGE语句,可能会更容易。类似的东西:

MERGE INTO t1 使用 (SELECT f1,f2,f3,f4 FROM t2)t2 上 (t1.f2 = t2.f2 AND t1.f3 = t2.f3) 当匹配时 更新集t1.f1 = t2.f1,            t1.f4 = t2.f4;

答案 1 :(得分:0)

如果您使用的是Oracle 9i或更高版本,则“MERGE”是最好的方法。

或者你可以像这样重写上面的查询

UPDATE table1 t1 
SET (t1.f1,t1.f2) = (
 select t2.f1,t2.f4 from table2 t2 
            where t1.f2 = t2.f2 and t1.f3 = t2.f3)
WHERE EXISTS (SELECT 1
          FROM table2 t2
          WHERE t1.f2=t2.f2 AND t1.f3=t2.f3);