仅在值不为null时更新MySQL中的多列

Gre*_*eso 0 mysql sql-update nul

我有一个包含多列A,B和C的MySQL表。

我只想使用一条SQL语句更新这些列。但是,有时某些列可以为空。

因此,如果A为空,则仅更新B和C。

如果A和B为空,则仅更新C。

依此类推,以及其他所有组合。

如何在一个语句中做到这一点?

谢谢。

bor*_*car 5

您可以在update子句中使用if:

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');
Run Code Online (Sandbox Code Playgroud)

示例运行:

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)
Run Code Online (Sandbox Code Playgroud)