MYSQL 的等效 CASE 语句中的结构化 If / Else 语句

Structured If / Else Statements In MYSQL's Equivalent CASE Statements

我正在尝试创建与我在下面使用 CASE 语句在 MYSQL 中使用简单的 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 

case不能用在[=12=的左边,只能用在右边。您可以对每一列使用 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)

下面的 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),