create table test (
id serial primary key,
c1 int,
c2 int
);
insert into test (c1,c2) values (1,1);
-- here (id, c1, c2) = (1, 1, 1)
update test set c1=2, c2=c1+2;
SELECT * FROM test ;
MySQL дает (1,2,4), Postgres дает (1,2,3).Обновить столбец таблицы, затем другой столбец с обновленным значением первого. MySQL/PostgreSQL отличаются
Я бы хотел, чтобы PostgreSQL вел себя как MySQL, чтобы работать с обновленным значением, а не оригинальным. Является ли это возможным? В противном случае, если у меня есть индексы в столбце и два обновления вместо одного, то у меня есть ненужное UPDATE = DELETE + INSERT (для PostgreSQL) и удвоение работы. В частном случае на самом деле мне нужно сделать 4 обновления вместо одного :(. Делать добавление легко вне SQL, но вместо этого у меня есть функция, связанная с SQL.
NB Насколько я помню, UPDATE = DELETE + INSERT не может быть для числовых типов, или, если они имеют индексы для VARCHARS всегда верно
Поскольку вы назначаете значение c1, почему бы не сделать 'c1 = 2, c2 = 2 + 2'? –
Потому что, как я писал, это просто пример, на самом деле я использую функцию SQL вместо этого вместо этого. Я мог бы сделать это: c1 = f (c1), c2 = f2 (f (c1)), писать избыточно, но интересно, есть ли лучшее решение. – anonymous
Хороший вопрос. Невозможно найти стандартное поведение SQL для UPDATE (поиск по SQL-источнику стандартного SQL) – Abelisto