Oracle SQL:将两条UPDATE语句合并为单条关联查询语句求助
合并两条UPDATE语句为单条关联查询语句
测试数据准备
create table table1(accountno number); insert into table1 values (1); insert into table1 values (2); insert into table1 values (3); insert into table1 values (4); insert into table1 values (5); insert into table1 values (6); create table table2(accountno number,check_y_n varchar2(20)); insert into table2 (accountno) values (4); insert into table2 (accountno) values (5); insert into table2 (accountno) values (6); insert into table2 (accountno) values (7); insert into table2 (accountno) values (8); insert into table2 (accountno) values (9);
原始需求
现有两条UPDATE语句,需合并为一条使用关联查询的语句:
UPDATE TABLE2 SET check_y_n ='YES' WHERE accountno IN (SELECT accountno FROM TABLE1); UPDATE TABLE2 SET check_y_n ='NO' WHERE accountno NOT IN (SELECT accountno FROM TABLE1);
解决方案
方案1:使用CASE表达式结合EXISTS关联
UPDATE table2 t2 SET check_y_n = CASE WHEN EXISTS (SELECT 1 FROM table1 t1 WHERE t1.accountno = t2.accountno) THEN 'YES' ELSE 'NO' END;
通过EXISTS高效判断table2的账号是否存在于table1中,利用CASE分支一次性为所有行设置对应的值。
方案2:使用MERGE语句(Oracle专属)
MERGE INTO table2 t2 USING (SELECT accountno FROM table1) t1 ON (t2.accountno = t1.accountno) WHEN MATCHED THEN UPDATE SET check_y_n = 'YES' WHEN NOT MATCHED THEN UPDATE SET check_y_n = 'NO';
MERGE语句原生支持匹配/不匹配分支的更新操作,通过USING子句关联两张表,一次完成两种情况的更新。
内容的提问来源于stack exchange,提问作者Bala S
相关产品推荐
相关产品推荐

