gpt4 book ai didi

postgresql - 更新 CASE 上的数值表.列

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

我想使用下面的postgresql

UPDATE table1 t1 
SET column1 = (
CASE
WHEN t1.column2 = 'yyy' THEN column1 = 10 * t2.column1
WHEN t1.column2 = 'zzz' THEN column1 = 10 * t2.column2
end)
FROM table2 t2

但我得到这个错误:column1 是数字类型,但表达式是 bool 类型 Line3: CASE

我该如何解决这个问题?

最佳答案

表达式 column1 = 10 * t2.column1 返回一个 bool 值,因为它将 column1 中的值与乘法结果进行比较。但是你只想要那里的乘法结果,所以你不需要与 =

进行比较

您也没有 ELSE 部分,这意味着对于 column2 的所有其他值,column1 将设置为 NULL。或者 - 甚至更好 - 不要通过添加适当的 WHERE 子句来更新具有不同值的行。

但更重要的是:您需要在两个表之间进行连接,否则您会在两者之间创建叉积 - 您不希望这样!

UPDATE table1 t1 
SET column1 = CASE
WHEN t1.column2 = 'yyy' THEN 10 * t2.column1
WHEN t1.column2 = 'zzz' THEN 10 * t2.column2
end
FROM table2 t2
WHERE t2.t1_id = t1.id --<<< the join condition!
and t1.column2 in ('yyy','zzz') -- don't update rows that don't need it

但如果您为值包含 WHERE 子句,我真的不认为需要 CASE 表达式开头:

UPDATE table1 t1 
SET column1 = 10 * t2.column1
FROM table2 t2
WHERE t2.t1_id = t1.id
and t1.column2 in ('yyy','zzz')

关于postgresql - 更新 CASE 上的数值表.列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58992596/

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