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
我发现了 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