mysql - 如何在 SQL case 语句中什么都不做?

标签 mysql sql performance

我需要有条件地更新列,在某些情况下根本不更新它。这是我能想到的最好的方法,但它似乎在 ELSE 中效率低下,因为它仍在使用列的当前值更新列。有没有更好的方法可以让 ELSE 完全“什么都不做”。

UPDATE mytable
SET col1 = CASE WHEN (col1 = 20) THEN 10 ELSE col1 END

最佳答案

应用WHERE:

UPDATE mytable
SET col1 = 10  
WHERE col1 = 20

但是,如果您的更新更复杂并且您实际上需要多个 CASE,您要么硬着头皮省略 WHERE,要么必须将所有列添加到您要更新的 WHERE:

UPDATE mytable
SET col1 = CASE WHEN (col1 = 20) THEN 10 ELSE col1 END,
SET col2 = CASE WHEN (col2 = 40) THEN 20 ELSE col2 END,
SET col3 = CASE WHEN (col3 = 80) THEN 30 ELSE col3 END
WHERE col1 = 20 OR col2 = 40 OR col3 = 80

这可能仍然会不必要地“更新”列(到它们的旧值)但不会完整的行。

关于mysql - 如何在 SQL case 语句中什么都不做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17767082/

相关文章:

java - 如何优化 2d java 游戏渲染?

php - 在一个网页中插入多个查询

php - 如何在 HEREDOC SQL 查询中使用 PHP 变量?

mysql - 删除具有两个重复字段但没有重复 ID 的 MySQL 行

windows - 为什么在 Windows 上创建新进程比在 Linux 上更昂贵?

linux - 为什么 Windows 上的 FFTW 比 Linux 上快?

mysql - 在查询中使用 MySQL 关键字?

php - 将两个 SELECT 连接到一个 mysql_query

java - 使用 apache Derby 的 WHERE 子句出现 SQL 语法错误

mysql - SQL 更新依赖于同一个表中最后一条记录的字段