我用的是PostGres 13。
下面是一个示例:
UPDATE table
SET
sum_col = col_1 + col_2,
another_sum_col = sum_col + col_3;
字符串sum_col
中的计算是否可用于下一个字段的计算(another_sum_col
)?
我正在做的事情比这更复杂,我遇到了差异,如果计算在同一个UPDATE
中不可用,这可能是可以解释的。换句话说,我需要运行第二个UPDATE
。
我用的是PostGres 13。
下面是一个示例:
UPDATE table
SET
sum_col = col_1 + col_2,
another_sum_col = sum_col + col_3;
字符串sum_col
中的计算是否可用于下一个字段的计算(another_sum_col
)?
我正在做的事情比这更复杂,我遇到了差异,如果计算在同一个UPDATE
中不可用,这可能是可以解释的。换句话说,我需要运行第二个UPDATE
。
1条答案
按热度按时间d7v8vwbk1#
**不,它不可用。**SQL标准对此很清楚:
UPDATE
only takes the "before" values的SET
部分的右侧,而不是“after”值。MySQL和MariaDB不遵循这一点,但它们不遵循规范。但是你不需要第二个
UPDATE
,你可以使用一个相关的(横向的)计算。这是a generalized technique,用于在不使用新级别的派生表或视图的情况下提供中间计算。令人烦恼的是,在Postgres中,你不能使用表中的列在横向连接中进行更新。我能看到的唯一方法是自连接表。(然而,SQL Server允许你直接使用正在更新的表。)
字符串
您也可以在前面提到的
SELECT
中执行此操作型