【问题标题】:Multiple conditional updates in a single sql query PLSQL单个 sql 查询 PLSQL 中的多个条件更新
【发布时间】:2022-01-18 13:30:27
【问题描述】:

我在数据库中有一些这样的值,有三条记录

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'

有什么方法可以在一个更新语句中同时进行这两个更新?

【问题讨论】:

    标签: sql plsql oracle-sqldeveloper


    【解决方案1】:

    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>
    

    【讨论】:

      【解决方案2】:

      你也可以解码函数来做到这一点

      update Your_table 
          set id = 'PREFIX_' || decode( id, 'TEST_TEST3', replace(id, '_', ''), id )
      where id in ('TEST_TEST1', 'TEST_TEST2', 'TEST_TEST3') 
      ;
      

      【讨论】:

        【解决方案3】:

        您可以使用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')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-11-28
          • 2017-10-23
          • 2022-11-17
          • 1970-01-01
          • 1970-01-01
          • 2013-12-13
          • 1970-01-01
          • 2019-01-16
          相关资源
          最近更新 更多