用案例更新 SQL table
Update SQL table with cases
我有一个 table,我想通过考虑一些条件来更新特定的列。例如,var1 将根据 columnC 字段获得不同的值。我正在使用下面的代码,我在 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';
这根本不起作用。该列不受影响。我也尝试删除 'lower' 或放置特定的 field.value 而不是变量但没有成功
您的查询有几个明显的问题。首先是 else
子句。
其次,您在 case
中有 =
。这是一个布尔比较,将 return 0 或 1。
但是,问题可能在于您希望执行 set
子句 "sequentially"。也就是说,您希望首先计算 number
,然后 var1
可以使用该数字,依此类推。但这不是 update
的工作方式(在 MySQL 或其他数据库中)。左侧的值来自 "old" 记录。右边的值在 "new" 记录中设置。
所以:
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" 选项相同。
我有一个 table,我想通过考虑一些条件来更新特定的列。例如,var1 将根据 columnC 字段获得不同的值。我正在使用下面的代码,我在 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';
这根本不起作用。该列不受影响。我也尝试删除 'lower' 或放置特定的 field.value 而不是变量但没有成功
您的查询有几个明显的问题。首先是 else
子句。
其次,您在 case
中有 =
。这是一个布尔比较,将 return 0 或 1。
但是,问题可能在于您希望执行 set
子句 "sequentially"。也就是说,您希望首先计算 number
,然后 var1
可以使用该数字,依此类推。但这不是 update
的工作方式(在 MySQL 或其他数据库中)。左侧的值来自 "old" 记录。右边的值在 "new" 记录中设置。
所以:
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" 选项相同。