单个 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') 
;