2016-03-31 5 views
0

Я пытаюсь запустить сазе, как показано ниже:заявление MYSQL СЛУЧАЙ (если/другое)

UPDATE table SET 
COL1 = CASE WHEN COL1 = '0' then 'something' else COL1 end, 
COL2 = CASE WHEN COL2 = '0' then 'something' else COL2 end, 
COL3 = CASE WHEN COL3 = '0' then 'something' else COL3 end 
WHERE ID = '$id_example' 

Но я хочу только первый случай, который является «TRUE» для выполнения.

EDIT:

UPDATE utskick SET 
DELIMITER // 
CREATE FUNCTION f() 
BEGIN 
    CASE 
     WHEN datum_1 = '0000-00-00' THEN datum_1 = '2020-01-01' ELSE datum_1// 
     WHEN datum_2 = '0000-00-00' THEN datum_2 = '2020-01-01' ELSE datum_2// 
     WHEN datum_3 = '0000-00-00' THEN datum_3 = '2020-01-01' ELSE datum_3// 
    END CASE // 
END // 
DELIMITER; 
CALL f() 
WHERE kund_id = '14' 

EDIT 2:

UPDATE table SET 
CASE 
    date_1 WHEN date_1 = '0000-00-00' THEN '2020-01-01' 
    ELSE 
     CASE date_2 WHEN date_2 = '0000-00-00' THEN '2020-01-01' 
     ELSE 
      CASE date_3 WHEN date_3 = '0000-00-00' THEN '2020-01-01' 
     END 
    END 
END 
WHERE id = 23 

И я получаю эту ошибку:

1064 - у Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии сервера MariaDB, для правильного синтаксиса для использования рядом с 'CASE datum_1 WHEN datum_1 =' 0000-00-00 'THEN' 2020-01-01 'ELSE' по строке 2

+0

Скажите это в когда это выражение: КОГДА (COL2 = '0' AND NOT (COL1 = '0')) и т. Д. – Turo

+0

Нет, не работает. Если оба COL2 и COL3 пусты, оба получают новое значение. Id COL2 пуст. Я хочу, чтобы запрос остановился на нем и не добавил значение в COL3. – Anna

+0

thats etc .: WHEN (COL3 = '0' AND NOT (COL1 = '0' ИЛИ ​​COL2 = '0')) – Turo

ответ

0

Попробуйте

WHEN (COL3 = '0' AND NOT (COL1 = '0' OR COL2 = '0')) ... 
WHEN (COL2 = '0' AND NOT (COL1 = '0')) ... 
WHEN COL1 = '0' ... 

так только хотел, когда истинно

0

Если вы хотите чтобы использовать оператор CASE, вы должны поместить его в функцию. Что-то вроде:

DELIMITER // 
CREATE FUNCTION doSomething(col varchar(3)) 
BEGIN 
    CASE 
     WHEN col = 'col1' THEN dothis // 
     WHEN col = 'col2' THEN dothat // 
     WHEN col = 'col3' THEN someotherthing // 
    END CASE // 
END // 

DELIMITER ; 

вызова функции, как:

CALL doSomething(@parameter); 

Там больше Инфо here.

+0

Нет, не могу заставить это работать. Наверное, потому что я делаю что-то неправильно ... См. Мой код вопроса. – Anna

0

Используйте вложенный оператор CASE, следующим образом:

CASE COL1 WHEN '0' THEN 'something1' 
ELSE 
    CASE COL2 WHEN '0' THEN 'something2' 
    ELSE 
     CASE WHEN COL3 = '0' THEN 'something3' 
     END 
    END 
END 

SqlFiddle Example

+0

Это выглядит правильно, но, к сожалению, я получаю кучу ошибок при запуске запроса. Я могу запустить этот статус в запросе SELECT, но не в запросе UPDATE. – Anna

+0

Просьба показать инструкцию обновления и ошибки. –

+0

Смотрите мой код. – Anna

Смежные вопросы