Использование IF и SET в одном выражении SQL - PullRequest
0 голосов
/ 13 февраля 2019

Мне нужно смешать операторы IF и SET в хранимой процедуре SQL.Я уже объявил переменные p1, ct, ac, yoyo1, yoyo2 и т. Д.).Я хотел бы добиться следующих результатов:

  • если so=0, то p1=yoyo1 И so станет равным 1
  • в противном случае, если ct=0, тогда p1=yoyo2 И ct становится равным 1
  • , в противном случае, если ac=0, тогда p1=yoyo3 И ac становится равным 1.

Iпробовал следующий код 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 ]

0 голосов
/ 13 февраля 2019
    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 (я бы предпочел этот):

    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;
0 голосов
/ 13 февраля 2019

Если ваш код является частью хранимой процедуры, вы можете использовать MySQL IF синтаксис следующим образом:

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 (троичный оператор) с функцией IF() , которая является функцией потока управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...