2015-10-02 2 views
0

J'ai une table MySQL avec plusieurs colonnes, A, B et C.Mettre à jour plusieurs colonnes MySQL, mais seulement quand une valeur est non nulle

Je voudrais mettre à jour ces colonnes en utilisant une seule instruction SQL. Cependant, certaines colonnes peuvent parfois être nulles.

Ainsi, si A est nul, mettez à jour uniquement B et C.

Si A et B sont nuls, ne met à jour C.

Et ainsi de suite, avec toutes les autres combinaisons.

Comment puis-je faire cela en une seule déclaration?

Merci.

Répondre

2

Vous pouvez utiliser si dans votre clause de mise à jour:

update test_update set A=if(A is null, null, 'A2'), B=if(B is null, null, 'B2'), C=if(C is null, null, 'C2'); 

Exemple exécuté:

MariaDB [test]> select * from test_update; 
+------+------+------+ 
| A | B | C | 
+------+------+------+ 
| A1 | NULL | NULL | 
| NULL | B1 | NULL | 
| NULL | NULL | C1 | 
| A1 | B1 | NULL | 
| A1 | NULL | C1 | 
| NULL | B1 | C1 | 
| A1 | B1 | C1 | 
+------+------+------+ 
7 rows in set (0.00 sec) 

MariaDB [test]> update test_update set A=if(A is null, null, 'A2'), B=if(B is null, null, 'B2'), C=if(C is null, null, 'C2'); 
Query OK, 7 rows affected (0.00 sec) 
Rows matched: 7 Changed: 7 Warnings: 0 

MariaDB [test]> select * from test_update; 
+------+------+------+ 
| A | B | C | 
+------+------+------+ 
| A2 | NULL | NULL | 
| NULL | B2 | NULL | 
| NULL | NULL | C2 | 
| A2 | B2 | NULL | 
| A2 | NULL | C2 | 
| NULL | B2 | C2 | 
| A2 | B2 | C2 | 
+------+------+------+ 
7 rows in set (0.00 sec) 
1

Il semble étrange que vous voulez mettre à jour uniquement NULL non valeurs, mais comment vous » J'ai écrit la déclaration. Je l'écrirais comme:

update test_update 
    set A = (case when A is not null then 'A' end), 
     B = (case when B is not null then 'B' end), 
     C = (case when C is not null then 'C' end) 
    where A is not null or B is not null or C is not null; 

Les chaînes constantes sont, bien sûr, toutes les nouvelles valeurs que vous voulez.