Oracle
使用嵌套子查詢更新值
我在 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 ;