2011-09-09 123 views
1

在Oracle中可以选择数据集并像Merge语句中那样使用它进行更新。Oracle在更新之前选择

我正在寻找类似

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

要像“在合并语句中”那样进行更新,为什么不使用合并语句? 'when matched'和'when not matched'子句都是可选的。要在没有插入的情况下进行更新,只需使用'when matched'子句。 –

回答

7

这听起来像你只是想

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从T返回单行,则可以省略WHERE子句加入这两个表。

+0

这应该解决我的问题,但我担心的表现。这是一个与合并语句中的select子句不同的相关子查询。如果我错了,请纠正我的错误 – Avinash

+1

@Avinash - 执行只有更新的MERGE(不管这是否合法语法取决于Oracle版本)应该不会更有效,而不是执行相关更新。 –