mysql 多列更新,MySQL CASE更新多列

I would like to update multiple columns in my table using a case statement, but I cannot find how to do this (is this even possible). I came up with the following invalid reference query:

UPDATE tablename SET

CASE name

WHEN 'name1' THEN col1=5,col2=''

WHEN 'name2' THEN col1=3,col2='whatever'

ELSE col1=0,col2=''

END;

Is there any way of achieving the expected result with valid SQL?

解决方案UPDATE tablename

SET col1 = CASE WHEN name = 'name1' THEN 5

WHEN name = 'name2' THEN 3

ELSE 0

END

, col2 = CASE WHEN name = 'name1' THEN ''

WHEN name = 'name2' THEN 'whatever'

ELSE ''

END

;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`CASE WHEN` 语法在 MySQL 用于条件判断和选择性的数据更新操作。它允许你在 SQL 查询基于某个表达式的结果来进行不同的操作。 基本结构如下: ```sql UPDATE table_name SET column = CASE WHEN condition THEN value ELSE default_value END [WHERE some_condition]; ``` 这里是一个具体的例子说明如何在更新数据时使用 `CASE WHEN`: 假设我们有一个名为 `students` 的表,其包含 `id`, `name`, 和 `grade` ,现在我们要将所有成绩小于60的学生的成绩更新为60分。 ```sql UPDATE students SET grade = CASE WHEN grade < 60 THEN 60 ELSE grade END; ``` 在这条查询: - `UPDATE students` 表示我们将对 `students` 表执行更新操作。 - `SET grade =` 指定了我们需要更新及其新值。 - `CASE` 后面的部分是我们使用的 `CASE WHEN` 语法块。 - `WHEN grade < 60 THEN 60` 是条件分支,如果满足这个条件(即学生分数小于60),则将其分数设置为60。 - `ELSE grade` 部分表示当上述条件不满足时(即学生分数等于或大于60),保持原分数不变。 - 最后的 `END` 结束了 CASE 语法块。 `CASE WHEN` 除了上面的基本结构之外,还可以包含更多复杂的条件分支和默认值,使得你可以更灵活地控制数据的更新过程。例如: ```sql UPDATE students SET grade = CASE WHEN grade < 50 THEN 50 -- 如果分数小于50,则设置为50 WHEN grade BETWEEN 50 AND 69 THEN (grade + 10) / 2 -- 如果分数在50到69之间,则取平均值并向上取整作为新的分数 ELSE grade -- 其他情况保持原有分数不变 END; ``` 通过使用 `CASE WHEN`,你可以有效地根据不同的条件动态调整数据库的数据,这对于自动化数据清洗、错误修正或是基于特定规则的批量更新特别有用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值