是否可以在MySQL的单个语句中将相同的UPDATE逻辑应用于多个列?

时间:2018-07-16 13:11:19

标签: mysql sql-update

我使用MySQL 8.0,并且试图将具有许多列的表中的空字符串更改为NULL。

我想知道是否有更智能的方法,可以在单个语句中将相同的UPDATE逻辑应用于多个列。

所以代替:

UPDATE tbl SET col1 = NULL WHERE col1 = '';  
UPDATE tbl SET col2 = NULL WHERE col2 = '';  
UPDATE tbl SET col3 = NULL WHERE col3 = '';

类似的东西:

UPDATE tbl SET <multiple_columns> = NULL WHERE <multiple_columns> = '';

可使用的最小数据集:

CREATE TABLE tbl (col1 TEXT, col2 TEXT, col3 TEXT);
INSERT INTO tbl VALUES ('', 'B', 'C'), ('A', '', 'C'), ('A', 'B', '');

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用case表达式在单个查询中完成此操作,但是您需要将其应用于每一列

UPDATE tbl 
SET col1 = case when col1 = '' then null else col1 end,
col2 = case when col2 = '' then null else col2 end,
col3 = case when col3 = '' then null else col3 end;

Demo