Oracle更新前选择

Oracle更新前选择,oracle,Oracle,在Oracle中,有一种方法可以选择数据集并将其用于更新,就像在Merge语句中一样 我在找像这样的东西 USING ( SELECT a, b, c FROM t ) UPDATE t1 SET t1.x = t.a, t1.y = t.b; 听起来你只是想 UPDATE t1 SET (x, y) = (SELECT a, b FROM t WHERE t.some_column = t1.some_colum

在Oracle中,有一种方法可以选择数据集并将其用于更新,就像在Merge语句中一样

我在找像这样的东西

USING
(
SELECT a, b, c FROM t
)
UPDATE t1
SET t1.x = t.a,
t1.y = t.b;

听起来你只是想

UPDATE t1
   SET (x, y) = (SELECT a, b
                   FROM t
                  WHERE t.some_column = t1.some_column);
如果只想在T中有匹配行的情况下更新T1中的行

UPDATE t1
   SET (x, y) = (SELECT a, b
                   FROM t
                  WHERE t.some_column = t1.some_column)
 WHERE EXISTS (
   SELECT 1
     FROM t
    WHERE t.some_column = t1.some_column );

如果SELECT from T返回一行,您可以省略连接两个表的WHERE子句。

听起来您只是想

UPDATE t1
   SET (x, y) = (SELECT a, b
                   FROM t
                  WHERE t.some_column = t1.some_column);
如果只想在T中有匹配行的情况下更新T1中的行

UPDATE t1
   SET (x, y) = (SELECT a, b
                   FROM t
                  WHERE t.some_column = t1.some_column)
 WHERE EXISTS (
   SELECT 1
     FROM t
    WHERE t.some_column = t1.some_column );

如果SELECT from T返回一行,可以省略连接两个表的WHERE子句。

这应该可以解决我的问题,但我担心性能。这是一个相关子查询,与merge语句中的select子句不同,它非常繁重。如果我不高兴,请纠正我wrong@Avinash-执行仅更新其合法语法是否取决于Oracle版本的合并应该不会比执行相关更新更有效。这应该可以解决我的问题,但我担心性能。这是一个相关子查询,与merge语句中的select子句不同,它非常繁重。如果我不高兴,请纠正我wrong@Avinash-执行仅更新其合法语法是否取决于Oracle版本的合并不会比执行相关更新更有效。要执行类似于合并语句中的更新,为什么不使用合并语句?when matched和when not matched子句都是可选的。要在不插入的情况下执行更新,请使用just the when matched子句。要执行类似于Merge语句的更新,为什么不使用Merge语句?when matched和when not matched子句都是可选的。要在不插入的情况下执行更新,请使用when matched子句。