代码之家  ›  专栏  ›  技术社区  ›  SamanthaAlexandria

在同一SQL语句中使用if和set

  •  0
  • SamanthaAlexandria  · 技术社区  · 6 年前

    我需要在SQL存储过程中混合if和set语句。 我已经声明了变量p1、so、ct、ac、yoyo1、yo2等)。我希望取得以下成果:

    • 如果 so=0 然后 p1=yoyo1 so 等于 1
    • 否则如果 ct=0 然后 p1=yoyo2 ct 等于
    • 否则如果 ac=0 然后 p1=yoyo3 ac 等于 .

    我尝试了以下SQL代码,但它返回 0 :

    SET p1=IF(so=0, yoyo1 AND SET so=1, 
      IF(ct=0, yoyo2 AND SET ct=1, 
         IF(ac=0 , yoyo3 AND SET ac=1,'image01.jpg'))); 
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   GMB    6 年前

    如果代码是存储过程的一部分,则可以使用 MySQL IF syntax 如下:

    IF so=0 THEN 
        SET p1 = 'yoyo1';
        SET so = 1;
    ELSEIF ct = 0 THEN
        SET p1 = 'yoyo2';
        SET ct = 1;
    ELSEIF ac = 0 THEN
        SET p1 = 'yoyo3';
        SET ac = 1;
    ELSE
        SET p1 = 'image01.jpg';
    END IF;
    

    如文档中所述,注意不要混淆 这个 如果 陈述 (三元运算符)与 这个 IF() 功能 ,wich是一个控制流功能。

        2
  •  0
  •   fifonik    6 年前
        IF so=0 THEN
            SET p1='yoyo';
            SET so=1;
        ELSE
            IF ct=0 THEN
                SET p1='yoyo2';
                SET ct=1;
            ELSE
                IF ac=0 THEN
                    SET p1='yoyo3';
                    SET ac=1;
                ELSE
                    SET p1='image01.jpg';
                END IF;
            END IF;
        END IF;
    

    或使用 CASE statement (我更喜欢这个):

        CASE
            WHEN so=0 THEN
                BEGIN
                    SET p1='yoyo';
                    SET so=1;
                END;
            WHEN ct=0 THEN
                BEGIN
                    SET p1='yoyo2';
                    SET ct=1;
                END;
            WHEN ac=0 THEN
                BEGIN
                    SET p1='yoyo3';
                    SET ac=1;
                END;
            ELSE
                BEGIN
                    SET p1='image01.jpg';
                END;
        END CASE;