#postgresql #join
#postgresql #Присоединиться
Вопрос:
Поэтому я впервые хочу обновить запрос с несколькими соединениями.
База данных = Postgres v. 10
Это то, что я пробовал до сих пор:
update table1 t1 set t4.datum = t1.datum from table1 t1 inner join table3 t3 on t3.id = t1.id inner join table4 t4 on t4.id = t3.t4_id where t3.id = 550 and t4.scale is not null and t4.datum is null
Ошибка : Ошибка SQL [42712]: ОШИБКА: имя таблицы «t1» указано более одного раза
Следующая попытка:
update table1 t1 set t4.datum = t.datum from table1 t inner join table3 t3 on t3.id = t.id inner join table4 t4 on t4.id = t3.t4_id where t3.id = 550 and t4.scale is not null and t4.datum is null
Ошибка: Ошибка SQL [42703]: ОШИБКА: столбец «t4» отношения «таблица 1» не существует Должность: 28
Последняя попытка:
update table1 t1 set t4.datum = t.datum from table1 t inner join table3 t3 on t3.id = t.id inner join table4 t4 on t4.id = t3.t4_id where t1.id = t.id and t3.id = 550 and t4.scale is not null and t4.datum is null
Ошибка: Ошибка SQL [42703]: ОШИБКА: столбец «t4» отношения «таблица 1» не существует Должность: 28
Что я делаю не так?
Ответ №1:
Вы не должны повторять целевую таблицу ОБНОВЛЕНИЯ в предложении FROM. Так что что-то вроде. Задание set t4.datum = t.datum
также кажется неправильным. Если вы хотите обновить table1
, вы не можете ссылаться t4
на левую часть задания. Кроме того, целевые столбцы не могут быть «квалифицированы по таблице» внутри части НАБОРА (так как ясно, какой столбец таблицы имеется в виду)
Поэтому я думаю, что вы ищете что-то вроде этого:
update table1 t1 set datum = t4.datum from table3 t3 inner join table4 t4 on t4.id = t3.t4_id where t1.id = t3.id and t3.id = 550 and t4.scale is not null and t4.datum is null
Ответ №2:
Ссылайтесь на псевдоним таблицы в предложении FROM, а затем используйте его повсюду. Я думаю, что я отредактировал это правильно:
update t1 set t4.datum = t1.datum from table1 t1 inner join table3 t3 on t3.id = t1.id inner join table4 t4 on t4.id = t3.t4_id where t3.id = 550 and t4.scale is not null and t4.datum is null;
Комментарии:
1. Не работает 🙁
Ответ №3:
Я думаю, что ваша проблема в том, что вы хотите обновить t4.datum
данные из таблицы table1
.
Вам следует изменить столбец set t4.datum = t1.datum
на t1.datum = t4.datum
, потому что вы хотите обновить table1
(запрос на обновление: update table1 t1
), а t4.datum
не ссылаться на table1
Следует изменить запрос, как показано ниже (если вы хотите обновить table1
):
update table1 t1 set t1.datum = t4.datum from table1 t inner join table3 t3 on t3.id = t.id inner join table4 t4 on t4.id = t3.t4_id where t1.id = t.id and t3.id = 550 and t4.scale is not null and t4.datum is null
Отредактированный
Запрос на обновление table4
:
update table4 u_t4 set datum = t1.datum from table1 t1 inner join table3 t3 on t3.id = t1.id inner join table4 t4 on t4.id = t3.t4_id where t4.id = u_t4.id and t3.id = 550 and t4.scale is not null and t4.datum is null
Комментарии:
1. Правда, я ошибся с таблицами. На самом деле я хочу обновить таблицу 4, так как t4.datum находится в этой таблице
2. Я отредактировал сообщение для обновления
table4