如何在PostgreSQL更新语句中重用新分配的列

问题描述

从这个简单的示例可以很明显地看出,drop table if exists stocks cascade; create table stocks ( id serial,stock_available int,stock_locked int ); insert into stocks(stock_available,stock_locked) values (100,10),(100,10); update stocks set stock_available = 5,stock_locked = stock_available + 1; select * from stocks; id|stock_available|stock_locked| --|---------------|------------| 1| 5| 101| 2| 5| 101| 3| 5| 101| 4| 5| 101| 5| 5| 101| 句子中一列的新分配值不能简单地在其他列分配中重复使用。

excluded

我想知道是否有类似{{1}}的更新。

解决方法

在更新语句中没有“排除”子句。但是,有一个“ include”子句:WHERE。 WHERE子句定义单个行必须满足的条件。例如:

update stocks
   set stock_available = 5,stock_locked = stock_available + 1  
 where id = 3;

通过在WHERE中指定NOT条件,可以有效地创建“排除”。因此((使用条件不佳,但会证明)

update stocks
   set stock_available = 7,stock_locked = stock_available + 1  
 where id NOT < 4; 

WHERE对select和delete语句执行的操作完全相同。即定义符合指定操作的行。