Вот что я сделал:
Инициализация
create table t1 (id int, n int default 0);
create table t2 (id int);
insert into t1 values (1), (2), (3);
insert into t2 values (1), (2), (2), (3), (3), (3);
Таблицы в начале
t1:
id ; n
1 ; 0
2 ; 0
3 ; 0
t2
id
1
2
2
3
3
3
Контрольный пример 1:
update t1 z1 set n = z1.n + 1 from t2 z2 where z1.id = z2.id;
Результат - то, что вы описали, т.е. t1
id ; n
1 ; 1
2 ; 1
3 ; 1
Я подозреваю, что причина этого результата в том, что в z1.n + 1
значение z1.n
определяется только в начале, и оно не обновляется при совпадении большего количества строк.Таким образом, результат будет эквивалентен результату, который вы получите, выполнив SELECT
select *, t1.n + 1 from t1,t2 where t1.id = t2.id;
Обратите внимание, что каждый UPDATE
будет увеличивать все значения в n на единицу, если есть хотя бы одна строка, для которойt1.id = t2.id
верно.
Контрольный пример 2:
update t1 set n = (select count(*) from t2 where t2.id = t1.id)
Результат был тем, что вы ожидали, т.е. t1
id ; n
1 ; 1
2 ; 2
3 ; 3
Обратите внимание, что конечный результат остается тем же послекаждый UPDATE
, если таблица t2
не была изменена.