gpt4 book ai didi

sql - 如何改进此条件更新查询?

转载 作者:行者123 更新时间:2023-11-29 12:24:22 25 4
gpt4 key购买 nike

我有一个包含多个列的表 t,我们将它们命名为 abc。我还有一个指示当前状态的 state 列。还有一个 id 列。

我想编写以下查询:始终更新列a,但bc 仅当应用程序state 仍然等于数据库 state。此处,state 列用于乐观锁定。

我将这个查询写成如下:

UPDATE t
SET a = $a$,
b = (CASE WHEN state = $state$ THEN $b$ ELSE b END),
c = (CASE WHEN state = $state$ THEN $c$ ELSE c END)
WHERE id = $id$ AND
(
a != $a$ OR
b != (CASE WHEN state = $state$ THEN $b$ ELSE b END) OR
c != (CASE WHEN state = $state$ THEN $c$ ELSE c END)
)

这里,$id$, $a$, ... 是来自应用程序的输入变量。 WHERE 子句的第二部分是为了避免不会有效更新任何内容的更新。

此查询按预期工作,但非常笨拙。我多次重复相同的条件。我正在寻找一种以更优雅的方式重写此查询的方法。如果这是一个简单的 SELECT 查询,我可以使用 LATERAL JOIN 做一些事情,但我看不到如何在此处应用它。

我怎样才能改进这个查询?

最佳答案

将查询一分为二:

UPDATE t
SET a = $a$
WHERE id = $id$

UPDATE t
SET b = $b$,
c = $c$
WHERE id = $id$ AND
state = $state$

如果您需要原子性,请包装在事务中。

关于sql - 如何改进此条件更新查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48823748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com