问题描述
从这个简单的示例可以很明显地看出,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语句执行的操作完全相同。即定义符合指定操作的行。