Oracle

使用嵌套子查詢更新值

  • May 17, 2018

我在 Oracle 工作,並嘗試根據來自其他兩個表(B 和 C)的資訊將 tableA 中的值更新為 = ‘Y’

如果我只有第一個 select 語句,我已經嘗試過類似的方法,但我需要使用第二個 select 語句排除一些記錄。

update tableA set value1 = 'Y'
where tableB_ID in 
(
   select ID from tableB 
   where class in ('1','2')
) 
and tableC_ID in 
(
 select ID from tableC where name not like 'MPG%'
)

我發現UPDATE帶有復雜WHERE子句的語句在寫成MERGE語句時更容易理解和維護。

例子

MERGE INTO TableA a1
USING (
SELECT TableA_ID, 'Y' value1
FROM TableA a
JOIN TableB b ON a.TableB_ID=b.TableB_ID
 JOIN TableC c ON a.TableC_ID=TableC_ID
WHERE
   b.class in ( '1', '2' )
 AND c.name NOT LIKE 'MPG%'
) b1
ON (a1.TableA_ID=b1.TableA_ID)
WHEN MATCHED THEN UPDATE
SET a1.value=b1.value
;

引用自:https://dba.stackexchange.com/questions/206971