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

时间:2015-11-17 00:47:25

标签: mysql case

我正在尝试使用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 

2 个答案:

答案 0 :(得分: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)

let buffer = UnsafeMutablePointer<CVPixelBuffer?>.alloc(1)

答案 1 :(得分: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),