2010-07-15 5 views
2

Il s'agit essentiellement d'une extension de Update multiple rows with one query?. Je souhaite pouvoir mettre à jour plusieurs colonnes de plusieurs lignes à la fois, mais pas nécessairement pour mettre à jour chaque colonne de chaque ligne.Mettre à jour plusieurs lignes avec différentes valeurs facultatives pour différentes colonnes

Voici un exemple de commande, je voudrais être en mesure d'exécuter:

UPDATE person 
SET name = CASE id 
    WHEN 1 THEN 'Jim' 
    WHEN 3 THEN 'Precious' 
END, 
sex = CASE id 
    WHEN 1 THEN 'female' 
    WHEN 2 THEN 'male' 
END 
WHERE id IN (1,2,3) 

Cependant ce retourne une erreur, me disant colonne « nom » ne peut pas être nulle. Il me semble donc que la spécification de WHERE id IN (x,y,z) signifie que toutes les colonnes sélectionnées doivent être mises à jour, même si nous indiquons les valeurs à placer au cas par cas.

Y at-il un moyen de contourner cette limitation, comme une notation spéciale pour indiquer "conserver la valeur d'origine"? Sinon, existe-t-il un autre moyen de mettre à jour certaines colonnes arbitraires de plusieurs lignes dans une requête?

Répondre

5

Je pense que vous devriez ajouter un Else en le mettant à jour à sa valeur d'origine.

UPDATE person 
SET name = CASE id 
    WHEN 1 THEN 'Jim' 
    WHEN 3 THEN 'Precious' 
    ELSE name 
END, 
sex = CASE id 
    WHEN 1 THEN 'female' 
    WHEN 2 THEN 'male' 
    ELSE sex 
END 
WHERE id IN (1,2,3) 
+0

Merci a travaillé comme un charme. – dimo414

3
... 
SET name = CASE id 
    WHEN 1 THEN 'Jim' 
    WHEN 3 THEN 'Precious' 
    ELSE name -- defaulting to the value it already has. 
... 
Questions connexes