2015-11-17 42 views
0

我试图创建下面在MYSQL中使用简单的if/else语句使用CASE语句演示的相同类型的逻辑。MYSQL的等效CASE语句中的结构化的If/Else语句

基本上,如果第一个条件是正确的,那么我就放弃其余的。如果第一个没有,但第二个然后放弃其他等

因此,在这种情况下,我将填充数据库中的第一个空白列从左到右的意思是“nwc_signup”,如下所示。

if(rota.nwc_signup_1 = '') { 

    rota.nwc_signup_1 = ? 

} else { 

    if(rota.nwc_signup_2 = '') { 

     rota.nwc_signup_2 = ? 

    } else { 

     if(rota.nwc_signup_3 = '') { 

      rota.nwc_signup_3 = ? 

     } else { 


      if(rota.nwc_signup_4 = '') { 

       rota.nwc_signup_4 = ? 

      } 

     } 

    } 

}  

我试过在MYSQL中使用CASE语句,但它会标记错误。有没有人有一个巧妙的想法来帮助这将不胜感激。

 UPDATE 

      `rota` 

      INNER JOIN `signups` 
      ON 
      signups.signups_user_id = rota.signups_user_id 

      INNER JOIN `pre_rota` 
      ON 
      pre_rota.signups_user_id = signups.signups_user_id 

     SET 

      CASE 

       WHEN rota.nwc_signup_1 = '' 

        THEN rota.nwc_signup_1 = ? 

        ELSE 

         CASE 

          WHEN rota.nwc_signup_2 = '' 

           THEN rota.nwc_signup_2 = ? 

           ELSE 

         END 
      END, 

     WHERE 

     pre_rota.nwc_username = 'jacktrow' 

MySQL的错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE 

       WHEN rota.nwc_signup_1 = '' 

        THEN SET rota.nwc_si' at line 15 

回答

0

以下SQL似乎完美工作。这些数据将被插入到总共四个空的第一个nwc_signup列中,这意味着一旦找到从第一列开始直到第四列的空列,它就不会被插入任何其他列中。

 SET 

      rota.nwc_signup_1 = (CASE WHEN rota.nwc_signup_1 = '' 

             THEN ? ELSE rota.nwc_signup_1 END), 

      rota.nwc_signup_2 = (CASE WHEN (rota.nwc_signup_1 != '' AND 
              rota.nwc_signup_2 = '') 

             THEN ? ELSE rota.nwc_signup_2 END), 

      rota.nwc_signup_3 = (CASE WHEN (rota.nwc_signup_1 != '' AND 
              rota.nwc_signup_2 != '' AND 
              rota.nwc_signup_3 = '') 

             THEN ? ELSE rota.nwc_signup_3 END), 

      rota.nwc_signup_4 = (CASE WHEN (rota.nwc_signup_1 != '' AND 
              rota.nwc_signup_2 != '' AND 
              rota.nwc_signup_3 != '' AND 
              rota.nwc_signup_4 = '') 

             THEN ? ELSE rota.nwc_signup_4 END), 
1

case不能对set左侧使用,只有正确的。您可以使用每列case

SET rota.nwc_signup_1 = (CASE WHEN rota.nwc_signup_1 = '' THEN ? ELSE END), 
     rota.nwc_signup_2 = (CASE WHEN rota.nwc_signup_1 = '' THEN rota.nwc_signup_2 
           WHEN rota.nwc_signup_1 = '' THEN ? 
           ELSE rota.nwc_signup_2 
          END) 
+0

感谢您的答复,非常感谢,我很困惑您的代码,请纠正我,如果我错了,但我不能看到它在我想要的情况下工作。然而,它确实教育并激励我创造我发现的工作,并将其发布为我的答案。 –