首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL更新--忽略不使用CASE语句的记录

MySQL更新--忽略不使用CASE语句的记录
EN

Stack Overflow用户
提问于 2019-11-14 15:39:19
回答 4查看 1.1K关注 0票数 1

在使用case / the /然后时,如何忽略不在CASE语句中的记录?

例如,该语句将按预期更新三条匹配记录,但使所有不匹配时间/然后子句的学生记录变为空

代码语言:javascript
运行
复制
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
                                 WHEN student = '17' THEN '100295' 
                                 WHEN student = '26' THEN '100981'
                            END)
WHERE year = '2019';

如何跳过不在CASE语句中的记录,而只更改具有匹配子句的记录?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-11-14 15:43:28

您可以使用默认的大小写:

代码语言:javascript
运行
复制
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
                                 WHEN student = '17' THEN '100295' 
                                 WHEN student = '26' THEN '100981'
                                 ELSE student
                            END)
WHERE year = '2019';

否则,如果希望最小化负载,只需将所有已知的student值添加到WHERE子句中即可。这只会触发对真正受更改影响的行的更新。

票数 3
EN

Stack Overflow用户

发布于 2019-11-14 15:45:51

对于跳过记录,而不是在case语句中,您可以使用这样的方法

代码语言:javascript
运行
复制
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
                                 WHEN student = '17' THEN '100295' 
                                 WHEN student = '26' THEN '100981'
                            END)
WHERE year = '2019' AND student IN ('10','17','26');
票数 4
EN

Stack Overflow用户

发布于 2019-11-14 15:45:12

我认为有两个解决办法:

  1. 添加where子句

代码语言:javascript
运行
复制
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
                                 WHEN student = '17' THEN '100295' 
                                 WHEN student = '26' THEN '100981'
                            END)
WHERE year = '2019' AND student IN ('10','17','26');

  1. 使用else语句,但这将扫描整个表,没有结果:

代码语言:javascript
运行
复制
UPDATE table SET student = (CASE WHEN student = '10' THEN '100412'
                                 WHEN student = '17' THEN '100295' 
                                 WHEN student = '26' THEN '100981'
                                 ELSE student
                            END)
WHERE year = '2019';
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58860583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档