2016-04-27 69 views
0

我浏览过论坛。我测试了几种不同的方法。我只是无法得到这个工作。MySQL案例更新

目标:

更新,如果答案在以前的专栏中存在下一列

Q1在这一点上NULL,我想将它设置为1

Q2 IS NULL,我希望它留NULL,如果Q1为null,如果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的更新之前,第二列的第一列,即使他们是在相同的更新语句的执行进行评估。

+0

“Q2 IS NULL,我希望它留NULL,如果Q1为null,如果Q1有一个答案,更新此列1” - 如果有什么'Q2 IS NOT NULL'?不要动它? –

+0

还有['IF()'](http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_if)函数。 – tadman

+0

正确的彼得,最终我有10列,我只是希望他们保持他们的价值,如果他们有一个,否则如果前一个问题没有响应为空或更新,如果它是队列中的下一个问题。 –

回答

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

+0

谢谢Peter,确实如此。这与SQL Server如何处理它完全不同。我应该考虑重新安排我的#THOUGHTS部分的顺序。我猜想那些日子之一。 –