更新 MySQL 中的多个列,但仅当值不为空时
Update multiple columns in MySQL but only when a value is not null
我有一个 MySQL table 有多个列,A、B 和 C。
我想仅使用一条 SQL 语句来更新这些列。但是,有时某些列可能为空。
因此,如果 A 为空,则仅更新 B 和 C。
如果A和B为空,只更新C。
以此类推,所有其他组合。
如何在一条语句中做到这一点?
谢谢。
您可以在更新子句中使用 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');
示例运行:
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)
您只想更新非 NULL
值似乎很奇怪,但这就是您编写语句的方式。我会写成:
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;
当然,常量字符串是您想要的任何新值。
我有一个 MySQL table 有多个列,A、B 和 C。
我想仅使用一条 SQL 语句来更新这些列。但是,有时某些列可能为空。
因此,如果 A 为空,则仅更新 B 和 C。
如果A和B为空,只更新C。
以此类推,所有其他组合。
如何在一条语句中做到这一点?
谢谢。
您可以在更新子句中使用 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');
示例运行:
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)
您只想更新非 NULL
值似乎很奇怪,但这就是您编写语句的方式。我会写成:
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;
当然,常量字符串是您想要的任何新值。