#postgresql #sql-update #postgresql-12
#postgresql #sql-обновление #postgresql-12
Вопрос:
Из этого простого примера ясно, что вновь присвоенное значение столбца в 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
для обновлений.
Ответ №1:
В инструкции update нет предложения «исключить». Однако существует предложение «включить»: ГДЕ. Предложение WHERE определяет условия, которым должны удовлетворять отдельные строки. Так, например:
update stocks
set stock_available = 5
, stock_locked = stock_available 1
where id = 3;
Вы можете эффективно создать «исключить», указав условие NOT в WHERE. Итак (плохое использование условия not, но оно продемонстрирует)
update stocks
set stock_available = 7
, stock_locked = stock_available 1
where id NOT < 4;
WHERE выполняет точно то же самое для операторов select и delete. А именно, чтобы определить строки, которые соответствуют требованиям для указанной операции.
Комментарии:
1. Итак, это так просто, как
update stocks set stock_available = 5, stock_locked = stock_available 1 where id = id;