2011-09-09 85 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版本)應該不會更有效,而不是執行相關更新。 –