MYSQL 使用多个 where 子句更新同一列

MYSQL Update same column with multiple where clause

我发现了 this 个问题,好像和我的一样。但是,两者之间有一点不同,因为一个在 where 子句中使用相同的列,而我有一个不同的。

这就是我想要达到的目标;

UPDATE table 
SET recent = 0 WHERE recent = 1 //update all `recent` column where its value is `1`.
AND
SET recent = 1 WHERE ID = 555 //update specific `recent` column where its ID is `555`.

是否可以在一个查询中做到这一点?

编辑:recent的数据类型是Boolean,应该只有一个设置为TRUE。所以我想将其全部设置回 FALSE 以确保其中 none 为真,然后将 ID of 555 的行更新为 TRUE它是唯一的 TRUE.

为了将来的可维护性:停止寻找此解决方案。

implied/expected 顺序是什么?

  • 你会先将最近的设置为 0,然后将单个项目(对于 555)设置为 1 吗?
  • 您是否会将 555 记录设置为 1,然后(与所有其他记录一起)设置回 0?

我想我知道答案了,但是在以后的代码更新中很容易漏掉这个。为将来的维护而优化,而不是为了保存语句执行。

构建两个语句,在事务中执行它们,您将拥有可读、可维护和可理解的代码。

(即使我觉得 Mureinik 的 CASE 语句也不太可读,尽管我有点喜欢这个解决方案)

您可以使用 case 表达式:

UPDATE mytable
SET    recent = CASE WHEN recent = 1 THEN 0
                     WHEN id = 555   THEN 1
                END
WHERE  recent = 1 OR id = 555