如何在 PostgreSQL 更新语句中重用新分配的列
How to reuse a newly assign column in a PostgreSQL update sentence
从这个简单的例子可以清楚地看出,update
句子中某列的新赋值不能简单地在其他列赋值中重复使用。
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),
(100, 10),
(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
的更新。
更新语句中没有“排除”子句。但是有一个“include”子句:WHERE。 WHERE 子句定义各个行必须满足的条件。例如:
update stocks
set stock_available = 5
, stock_locked = stock_available + 1
where id = 3;
您可以通过在 WHERE 中指定 NOT 条件来有效地创建“排除”。所以(不好用一个not条件,但是会演示)
update stocks
set stock_available = 7
, stock_locked = stock_available + 1
where id NOT < 4;
WHERE 对 select 和 delete 语句执行完全相同的操作。即定义符合指定操作条件的行。
从这个简单的例子可以清楚地看出,update
句子中某列的新赋值不能简单地在其他列赋值中重复使用。
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),
(100, 10),
(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
的更新。
更新语句中没有“排除”子句。但是有一个“include”子句:WHERE。 WHERE 子句定义各个行必须满足的条件。例如:
update stocks
set stock_available = 5
, stock_locked = stock_available + 1
where id = 3;
您可以通过在 WHERE 中指定 NOT 条件来有效地创建“排除”。所以(不好用一个not条件,但是会演示)
update stocks
set stock_available = 7
, stock_locked = stock_available + 1
where id NOT < 4;
WHERE 对 select 和 delete 语句执行完全相同的操作。即定义符合指定操作条件的行。