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

标签 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', '');

谢谢!

最佳答案

您可以使用 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

关于mysql - 是否可以将相同的 UPDATE 逻辑应用于 MySQL 中单个语句中的多个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51362665/

相关文章:

php - 将xml数据转换为php数组

php - 将学生添加到组中

php - 从mysql中的时间戳字段过滤日期

php - 更新 SQL 中的单行

sql - 在 Postgres 中使用动态查询 + 用户定义的数据类型

mysql - Django 1.8 迁移、自定义用户模型和 Postgres/MySQL 的奇怪问题

mysql - Visual Basic MySQL Datagrid 从数据库中删除

SQL 更新替换字符串中的部分文本

sql-server - 如何在sql server 2008中获取特定值的列名

SQL 根据前几行填空数据