powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что не так с Update?
4 сообщений из 4, страница 1 из 1
Что не так с Update?
    #39303208
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица t1, в которой надо изменить поле ид.
в другой таблице t_changes - соответствие старый ид - новый ид
Делаю update, получаю для всех измененых полей одно и то же значение.
Такйо апдейт у меня работает в T-SQL правильно.

Что не так?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
drop table t1;
drop table t2;
drop table t_changes;

create table t1
(id INT,name text, new_id INT default(0));

create table t_changes
(old_id INT,new_id int)

insert into t1(id,NAME)
VALUES (1,'n1'),(2,'n2'),(3,'n3');

insert into t_changes(old_id,new_id)
values(1,11),(2,12),(3,13),(4,13)

select * from t1;
select * from t_changes;

-------!!!!
update t1
set new_id = n.new_id
from t1 t 
inner join t_changes n
on n.old_id=t.id;

select * from t1
------------------------------
"id"	"name"	"new_id"
-----------------
"1"	"n1"	"11"
"2"	"n2"	"11"
"3"	"n3"	"11"
...
Рейтинг: 0 / 0
Что не так с Update?
    #39303213
pg_role
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант 1:

Код: plsql
1.
2.
3.
4.
5.
update t1 u
set new_id = n.new_id
from t1 t 
inner join t_changes n on n.old_id=t.id
where u.id = t.id;



Вариант 2:
Код: plsql
1.
2.
3.
4.
update t1 u
set new_id = n.new_id
from t_changes n
where n.old_id=u.id
...
Рейтинг: 0 / 0
Что не так с Update?
    #39303214
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин
-------!!!!
update t1
set new_id = n.new_id
from t1 t
inner join t_changes n
on n.old_id=t.id;

[/src]

Или крестик снять (лишнюю таблицу)

Код: plsql
1.
2.
3.
4.
update t1
set new_id = n.new_id
from t_changes n
WHERE n.old_id=t1.id;



Или трусы надеть (дать условие связи таблицы t1 в update и таблицы t (которая тоже t1 но не та же самая):

Код: plsql
1.
2.
3.
4.
5.
6.
update t1
set new_id = n.new_id
from t1 t 
inner join t_changes n
on n.old_id=t.id
WHERE t1.id=t.id;




--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Что не так с Update?
    #39303223
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, понял, спасибо,
проблема в том, что это правильно работает в SQL Server,
надо просмотреть все процедуры на наличие таких стремных выражений.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что не так с Update?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]