我浏览过论坛。我测试过几种不同的方法。我就是不能让这件事起作用。
目标:
如果上一列中存在答案,则更新下一列。
此时Q1为空,我希望将其设置为1。
Q2为空,如果Q1为空,则将其保持为空,如果Q1有答案,则将该列更新为1。
问题:
两列都会更新为1。
尝试:
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语句执行中。
发布于 2016-04-27 18:13:42
秩序很重要。首先设置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
https://stackoverflow.com/questions/36897603
复制相似问题