【问题标题】:Oracle Sql update multiple records at once?Oracle Sql 一次更新多条记录?
【发布时间】:2018-12-21 00:13:55
【问题描述】:

是否可以在一个 sql 查询中更新多条记录?
因此,将 ID 为 A 和 ip 1.1.1.1 的所有打印机的状态更新为工作(真),而其他所有打印机的状态都更新为不工作(假)
所以基本上将这两个查询组合成一个查询:

update printers set status = true ,row_update_date =sysdate where printer id = 'A' and printer ip = '1.1.1.1'
update printers set status = false ,row_update_date =sysdate where printer id = 'A' and printer ip != '1.1.1.1'

表结构:

printers table:

printer ID,printer ip, status,row_update_date 
A         ,1.1.1.1   ,
A         ,1.1.1.2   ,
A         ,1.1.1.3   ,
A         ,1.1.1.4   ,
B         ,1.1.2.1   ,
B         ,1.1.2.2   ,

更新
我忘了 row_update_date !

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    或者,您可以将 decode 用于 Oracle 的 SQL,用于 switch-case 类型的语句

    update printers 
       set status = decode(printer_IP,'1.1.1.1','true','false'),
           row_update_date = sysdate
     where printer_ID = 'A';
    

    【讨论】:

      【解决方案2】:

      你可以使用CASE:

      update printers 
      set status = CASE WHEN printer ip = '1.1.1.1' THEN true ELSE false END
          ,row_update_date = SYSDATE
      where printer id = 'A' 
      

      【讨论】:

      • 谢谢你,我忘了在所有记录上添加row_update_date,可以吗?
      • @user648026 是的,您可以一次更新多个列
      【解决方案3】:

      您可以尝试UPDATECASE WHEN

      update printers 
      set status = (CASE WHEN  printer ip = '1.1.1.1' 
                              THEN true
                         WHEN  printer ip != '1.1.1.1' 
                              THEN false 
                    END)
      WHERE printer id = 'A'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 2020-12-11
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多