更新中的MySQL案例

时间:2016-04-27 18:06:03

标签: mysql sql-update case

我浏览了论坛。我已经测试了几种不同的方法。我无法让它发挥作用。

目标:

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

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

Q2 IS为空,如果Q1为空,我希望它保持为NULL,如果Q1有答案,则将此列更新为1

问题:

两列始终更新为1

ATTEMPTS:

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在第二列被评估之前更新第一列,即使它们在同一更新语句执行中。

1 个答案:

答案 0 :(得分:1)

订单很重要。首先设置Q2(因为它检查Q1的先前值),然后设置Q1。

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

SQLFiddle