2013-02-28 2 views
1

Ce que j'essaie de faire est de définir quelques champs dans une base de données très simple à 3 colonnes que j'utilise pour gérer certaines cases.MYSQL WHEN CASE THEN ne fait rien

Je veux définir col_2 à 1 si id est dans la liste, laissant l'état col_3 intact. Mais si id est pas dans la liste la col_2 réglée et col_3 à 0.

C'est ce que j'ai jusqu'à présent, il ne fonctionne pas comme il me donne des avertissements et a changé la valeur de 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; 

Toute aide appréciée :)

Répondre

3

Voici comment laisser col_3 intacte

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; 

En ce qui concerne vos avertissements, nous n'avons pas assez d'informations

+0

Si simple !! J'ai essayé "ELSE col_3 = col_3" à un point mais cela a mis le champ à 1 et maintenant je vois mon erreur dans cela .. L'avertissement a disparu maintenant vous m'a montré la bonne question. Merci beaucoup pour votre aide :) – xgstr

+2

@xgstr: FYI, 'ELSE col_3 = col_3' est une expression booléenne implicite. col_3 est toujours égal à col_3 -> true -> 1. Pensez à 'IF (col_3 == col_3) ALORS ...' – gbn

+0

J'ai compris, merci encore – xgstr