powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запрос для изменения связей в БД
4 сообщений из 4, страница 1 из 1
Запрос для изменения связей в БД
    #35511422
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возьмем три таблицы: t1, t2, t3. В каждой первичный ключ называется id.
Между таблицами есть связи: t1.id = t2.t1_id и t2.id = t3.t2_id.
Надо привязать таблицу t1 к таблице t3, а связь t2 и t3 удалить (такова бизнес-логика, просто над ней кто-то надругался при проектировании).
Я написал такой запрос:
Код: plaintext
1.
2.
3.
alter table t3 add column t1_id bigint;
update t3 set t1_id = 
	(select t1.id from t1, t2 
	where t1.id = t2.t1_id and t2.id = t3.t2);
То есть для каждой строки третьей таблицы я нахожу значение ключа той строки первой таблицы, которая в данный момент связана с третьей, но через вторую.
Возникает ошибка - не найдена таблица t3. Я так понимаю, что значение поля таблицы t3 нельзя передать из внешнего запроса (update) во внутренний select... А как тогда можно автоматом заполнить связанное поле?
...
Рейтинг: 0 / 0
Запрос для изменения связей в БД
    #35511449
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rockclimber
Код: plaintext
1.
2.
update t3 set t1_id = 
	(select t1.id from t1, t2 
	where t1.id = t2.t1_id and t2.id = t3.t2);
Я так понимаю, что значение поля таблицы t3 нельзя передать из внешнего запроса (update) во внутренний select...можно, только ссылаться без префикса "t3."
Код: plaintext
1.
2.
update t3 set t1_id = 
	(select t1.id from t1, t2 
	where t1.id = t2.t1_id and t2.id = t2_id);
или так
Код: plaintext
update t3 set t1_id = t1.id from t1, t2 where t1.id = t2.t1_id and t2.id = t2_id;
...
Рейтинг: 0 / 0
Запрос для изменения связей в БД
    #35511459
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ведь в этом запросе t1 и не нужна
Код: plaintext
update t3 set t1_id = t2.t1_id from t2 where t2.id = t2_id;
...
Рейтинг: 0 / 0
Запрос для изменения связей в БД
    #35511498
rockclimber
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBatда ведь в этом запросе t1 и не нужна
Код: plaintext
update t3 set t1_id = t2.t1_id from t2 where t2.id = t2_id;

Черт, действительно... Как это сам не догадался...
Спасибо.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Запрос для изменения связей в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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