单个 sql 查询 PLSQL 中的多个条件更新
Multiple conditional updates in a single sql query PLSQL
我在包含三个记录的数据库中有一些这样的值
id
TEST_TEST1
TEST_TEST2
TEST_TEST3
现在我需要为所有值附加一个“前缀”。所以它变成了PREFIX_TEST_TEST1,PREFIX_TEST_TEST2等。但是对于第三个值TEST_TEST3,我必须把它改成PREFIX_TESTTEST3(没有下划线)
所以我使用如下两个更新查询实现了它
update table set id=concat('PREFIX',id) where id in ('TEST_TEST1','TEST_TEST2');
和第二个更新语句
update table set id='PREFIX_TESTTEST3' where id='TEST_TEST3'
有什么方法可以在一个更新语句中同时进行这两项更新吗?
CASE
表达式有帮助。
SQL> update test set
id = 'PREFIX_' || case when id = 'TEST_TEST3' then replace(id, '_')
else id
end
where id in ('TEST_TEST1','TEST_TEST2','TEST_TEST3');
3 rows updated.
SQL> select * From test;
ID
------------------------------
PREFIX_TEST_TEST1
PREFIX_TEST_TEST2
PREFIX_TESTTEST3
SQL>
您可以使用 case
表达式,例如:
update table
set id = case
when id in ('TEST_TEST1','TEST_TEST2' ) then concat('PREFIX',id)
when id ='TEST_TEST3' then 'PREFIX_TESTTEST3'
end
where id in ('TEST_TEST1','TEST_TEST2','TEST_TEST3')
你也可以解码函数来做到这一点
update Your_table
set id = 'PREFIX_' || decode( id, 'TEST_TEST3', replace(id, '_', ''), id )
where id in ('TEST_TEST1', 'TEST_TEST2', 'TEST_TEST3')
;
我在包含三个记录的数据库中有一些这样的值
id |
---|
TEST_TEST1 |
TEST_TEST2 |
TEST_TEST3 |
现在我需要为所有值附加一个“前缀”。所以它变成了PREFIX_TEST_TEST1,PREFIX_TEST_TEST2等。但是对于第三个值TEST_TEST3,我必须把它改成PREFIX_TESTTEST3(没有下划线)
所以我使用如下两个更新查询实现了它
update table set id=concat('PREFIX',id) where id in ('TEST_TEST1','TEST_TEST2');
和第二个更新语句
update table set id='PREFIX_TESTTEST3' where id='TEST_TEST3'
有什么方法可以在一个更新语句中同时进行这两项更新吗?
CASE
表达式有帮助。
SQL> update test set
id = 'PREFIX_' || case when id = 'TEST_TEST3' then replace(id, '_')
else id
end
where id in ('TEST_TEST1','TEST_TEST2','TEST_TEST3');
3 rows updated.
SQL> select * From test;
ID
------------------------------
PREFIX_TEST_TEST1
PREFIX_TEST_TEST2
PREFIX_TESTTEST3
SQL>
您可以使用 case
表达式,例如:
update table
set id = case
when id in ('TEST_TEST1','TEST_TEST2' ) then concat('PREFIX',id)
when id ='TEST_TEST3' then 'PREFIX_TESTTEST3'
end
where id in ('TEST_TEST1','TEST_TEST2','TEST_TEST3')
你也可以解码函数来做到这一点
update Your_table
set id = 'PREFIX_' || decode( id, 'TEST_TEST3', replace(id, '_', ''), id )
where id in ('TEST_TEST1', 'TEST_TEST2', 'TEST_TEST3')
;