You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:10:36