Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что не так с Update? / 4 сообщений из 4, страница 1 из 1
03.09.2016, 18:03
    #39303208
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так с Update?
Есть таблица 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
03.09.2016, 18:35
    #39303213
pg_role
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так с Update?
Вариант 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
03.09.2016, 18:37
    #39303214
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так с Update?
Ролг Хупин
-------!!!!
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
03.09.2016, 18:58
    #39303223
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Что не так с Update?
да, понял, спасибо,
проблема в том, что это правильно работает в SQL Server,
надо просмотреть все процедуры на наличие таких стремных выражений.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Что не так с Update? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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