Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.81.13.254] |
|
Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ. |
Сообщ.
#1
,
|
|
|
create table t1 (id integer, f1 integer, f2 integer); create table t2 (f1 integer, f2 integer); update t1 set (f1, f2) = (select t2.f1, t2.f2 from t1 right join t2 on t1.id = t2.f1); [Err] ОШИБКА: ошибка синтаксиса (примерное положение: "SELECT") LINE 2: (SELECT ^ Я никак не могу сообразить, как правильно обновлять значения в таблице на основании результатов SELECT .. FROM .. JOIN. Подскажите пожалуйста! |
Сообщ.
#2
,
|
|
|
какая версия PG у вас?? Такой синтаксис только начиная с 9.5
|
Сообщ.
#3
,
|
|
|
Цитата grgdvo @ Я в топе указал, что PostgreSQL 9.4. Печально, что вышеприведенная конструкция работает лишь с 9.5. Но должна же быть схожая конструкция для младших версий. Вариант с where = (SELECT ...) не интересен. Нужно обновление таблицы данными и по условию выборки из других таблиц. |
Сообщ.
#4
,
|
|
|
Попробуй такой запрос:
update t1 set t1.f1= t2.f1, t1.f2 = t2.f2 from t1 right join t2 on t1.id = t2.f1 |
Сообщ.
#5
,
|
|
|
MIF, t1 нельзя указывать и под UPDATE и под FROM.
HighMan, попробуйте вот так, вроде эквивалентно update t1 set (f1, f2) = (t2.f1, t2.f2) from t2 where t1.id = t2.f1; |
Сообщ.
#6
,
|
|
|
update t1 set (f1, f2) = (t2.f1, t2.f2) from t2 where t1.id = t2.f1; Такой способ работает, но я не представляю как подобным запросом обрабатывать связи таблиц источников. |
Сообщ.
#7
,
|
|
|
Вы можете делать JOIN практически также как в SELECT. Например
update t1 set (f1, f2) = (t2.f1, t2.f2) from t2, t3 where t1.id = t2.f1 and t2.f2 = t3.id; update t1 set (f1, f2) = (t2.f1, t2.f2) from t2 left join t3 on t2.f2 = t3.id where t1.id = t2.f1; |