【问题标题】:Update SQL table with cases使用案例更新 SQL 表
【发布时间】:2015-10-14 12:18:22
【问题描述】:

我有一个表,我想通过考虑一些条件来更新特定列。例如 var1 将根据 columnC​​trong> 字段获得不同的值。我正在使用下面的代码,并且在 MySQL Workbench 上没有出现错误,但我有 0 行受到影响。 var1 在我运行脚本时不会改变。

update table
  set number = columnA * columnB,
      var1 = case
              when lower(columnC) like '%aaa%' then var1 =  number
              when lower(columnC) like '%bbb%' then var1 =  number * 2
              when lower(columnC) like '%ccc%' then var1 =  number * 4
              else lower(columnC) 
              end,
      var2 = number / var1
;

我尝试对每个案例分别进行不同的更新。

update table 
set number = columnA * columnB;

效果很好。

update table 
set var1 = number where lower(columnC) like 'aaa';

这根本不起作用。列不受影响。我还尝试删除“较低”或放置特定的 field.value 而不是变量,但没有成功

【问题讨论】:

  • then number等直接,不需要var=number
  • 表中目前有哪些数据?什么是表架构?为什么你使用没有通配符的LIKE - 你应该可以使用= 来获得相同的结果。
  • 另外like 'aaa'被翻译成='aaa'所以你可能需要通配符like '%aaa%';
  • 对于else,我想你的意思是var1
  • @Mihai 我有这个通配符。

标签: mysql sql-update set case


【解决方案1】:

您的查询有几个明显的问题。首先是else 子句。

第二,=case 中。这是一个布尔比较,将返回 0 或 1。

但是,问题可能在于您希望 set 子句“按顺序”执行。也就是说,您希望首先计算number,然后var1 可以使用该数字,依此类推。但这不是update 的工作方式(在 MySQL 或其他数据库中)。左侧的值来自“旧”记录。右侧的值设置在“新”记录中。

所以:

update table
  set number = columnA * columnB,
      var1 = columnA * columnB *
             (case when lower(columnC) like '%aaa%' then 1
                   when lower(columnC) like '%bbb%' then 2
                   when lower(columnC) like '%ccc%' 4
                   else 1
              end),
      var2 = number / var1
      var2 = (case when lower(columnC) like '%aaa%' then 1/1.0
                   when lower(columnC) like '%bbb%' then 1/2.0
                   when lower(columnC) like '%ccc%' 1/4.0
                   else 1.0
              end);

我不确定else 子句应该是什么。我只是把它和“aaa”选项一样。

【讨论】:

  • 现在工作正常:更新表集编号 = columnA * columnB, var1 = case when lower(columnC) like '%aaa%' then number when lower(columnC) like '%bbb%' then number * 2 when lower(columnC) like '%ccc%' then number * 4 else var1 end, var2 = number / var1 ;
猜你喜欢
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 2020-04-07
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多