【问题标题】:MySQL update column which is a value in another columnMySQL更新列,这是另一列中的值
【发布时间】:2013-12-20 06:15:55
【问题描述】:

这是我之前与我的查询相关的问题。 MySQL select column which is a value in another column

问题是想要对提取的值进行操作并将其存储回原始数据库。我尝试过使用updatecase,但无法实现。

update msisdn_table
   CASE reason
     WHEN 'NoAnswer' THEN (case when (NoAnswer>0) then update msisdn_table set NoAnswer = NoAnswer-1 end)
     WHEN 'NetworkBusy' THEN (case when NetworkBusy>0 then update msisdn_table set NetworkBusy = NetworkBusy-1 end)
     WHEN 'CallRejection' THEN (case when CallRejection>0 then update msisdn_table set CallRejection = CallRejection-1 end)
     WHEN 'Unavailable' THEN (case when Unavailable>0 then update msisdn_table set Unavailable = Unavailable-1 end)
   END 

有什么帮助吗?

【问题讨论】:

    标签: mysql sql database


    【解决方案1】:

    如果你想做一个语句,试试这个方法

    UPDATE msisdn_table
       SET NoAnswer      = IFNULL(IF(reason = 'NoAnswer',      
                                     NULLIF(NoAnswer,      0) - 1, NoAnswer), 0), 
           NetworkBusy   = IFNULL(IF(reason = 'NetworkBusy',   
                                     NULLIF(NetworkBusy,   0) - 1, NetworkBusy), 0), 
           CallRejection = IFNULL(IF(reason = 'CallRejection', 
                                     NULLIF(CallRejection, 0) - 1, CallRejection), 0), 
           Unavailable   = IFNULL(IF(reason = 'Unavailable',   
                                     NULLIF(Unavailable,   0) - 1, Unavailable), 0)
      WHERE reason IN('NoAnswer', 'NetworkBusy', 'CallRejection', 'Unavailable');
    

    注意:

    1. 我更改了CASE,并减少了冗长的IF(),但如果您更喜欢它,您可以以同样的方式使用它。
    2. 这种方法有一个可能的副作用,因为它总是使用新值或旧值更新列。例如,您是否在表上定义了触发器可能很重要。
    3. 您希望应用WHERE 子句以确保具有其他reason 代码的行不受影响

    这里是SQLFiddle演示

    【讨论】:

      【解决方案2】:
      update msisdn_table set  NoAnswer = NoAnswer-1 where (NoAnswer>0) ;
      update msisdn_table set  NetworkBusy = NetworkBusy-1 where (NetworkBusy = NetworkBusy-1) ;
      update msisdn_table set  CallRejection = CallRejection-1 where (CallRejection>0) ;
      update msisdn_table set  'Unavailable' = 'Unavailable'-1 where (Unavailable>0) ;
      

      【讨论】:

        猜你喜欢
        • 2014-01-08
        • 1970-01-01
        • 1970-01-01
        • 2021-09-24
        • 1970-01-01
        • 2014-12-08
        • 2016-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多