2013-02-28 3 views
1

Что я пытаюсь сделать, это установить некоторые поля в очень простой базе данных из 3 столбцов, которые я использую для управления некоторыми флажками.MYSQL WHEN CASE THEN do nothing

Я хочу установить col_2 в 1, если id находится в списке, оставив состояние col_3 нетронутым. Но если идентификатор не в списке множество col_2 и col_3 в 0.

Это то, что я до сих пор не работает, поскольку это дает мне некоторые предупреждения и изменили значение col_3:

UPDATE t 
SET col_2 = 
CASE   
    WHEN id IN (list) THEN 1 
    WHEN id NOT IN (list) THEN 0 
END, 
col_3 = 
CASE 
    WHEN id NOT IN (list) THEN 0 
END 
WHERE id IS NOT NULL; 

Любая помощь приветствуется :)

ответ

3

Это как оставить нетронутым col_3

UPDATE t 
SET col_2 = 
CASE   
    WHEN id IN (list) THEN 1 
    WHEN id NOT IN (list) THEN 0 
END, 
col_3 = 
CASE 
    WHEN id NOT IN (list) THEN 0 
    ELSE col_3 --this 
END 
WHERE id IS NOT NULL; 

как для предупреждения, мы не имеем достаточно информации

+0

Так просто! Я попытался «ELSE col_3 = col_3» в какой-то момент, но это установило поле в 1, и теперь я вижу свою ошибку в этом. Предупреждение исчезло, теперь вы указали мне правильный запрос. Большое спасибо за помощь: – xgstr

+2

@xgstr: FYI, 'ELSE col_3 = col_3' - подразумеваемое логическое выражение. col_3 всегда равно col_3 -> true -> 1. Подумайте о 'IF (col_3 == col_3) THEN ...' – gbn

+0

Получил это, спасибо снова – xgstr

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