首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新中的MySQL案例

更新中的MySQL案例
EN

Stack Overflow用户
提问于 2016-04-27 18:06:03
回答 1查看 1.8K关注 0票数 0

我浏览过论坛。我测试过几种不同的方法。我就是不能让这件事起作用。

目标:

如果上一列中存在答案,则更新下一列。

此时Q1为空,我希望将其设置为1。

Q2为空,如果Q1为空,则将其保持为空,如果Q1有答案,则将该列更新为1。

问题:

两列都会更新为1。

尝试:

代码语言:javascript
运行
复制
UPDATE Story1_Responses 
SET Q1 = IFNULL(Q1,'1'),  
Q2 = CASE WHEN Q1 IS NULL THEN NULL ELSE '1' END 
WHERE UserID = 16

UPDATE Story1_Responses 
SET Q1 = IFNULL(Q1,'1'),  
Q2 = CASE WHEN IFNULL(Q1,'') = '' THEN NULL ELSE '1' END 
WHERE UserID = 16

UPDATE Story1_Responses 
SET Q1 = IFNULL(Q1,'1'),  
Q2 = CASE WHEN COALESCE(Q1, '') = '' THEN NULL ELSE '1' END 
WHERE UserID = 16

UPDATE Story1_Responses 
SET Q1 = IFNULL(Q1,'1'),  
Q2 = CASE WHEN Q1 IS NOT NULL THEN '1' ELSE IFNULL(Q2,NULL) END 
WHERE UserID = 16

思想:

在我看来,MySQL在计算第二列之前更新第一列,即使它们处于相同的update语句执行中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-27 18:13:42

秩序很重要。首先设置Q2 (因为它检查Q1的前一个值),然后设置Q1。

代码语言:javascript
运行
复制
UPDATE Story1_Responses 
SET Q2 = CASE WHEN Q1 IS NULL THEN NULL ELSE '1' END,
    Q1 = IFNULL(Q1,'1')
WHERE UserID = 16;

SQLFiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36897603

复制
相关文章

相似问题

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