Обновление или вставка (несколько строк и столбцов) из подзапроса в PostgreSQL
Я пытаюсь сделать что-то вроде этого в postgres:
UPDATE table1 SET (col1, col2) = (SELECT col2, col3 FROM othertable WHERE othertable.col1 = 123);INSERT INTO table1 (col1, col2) VALUES (SELECT col1, col2 FROM othertable)
но точка 1 не возможна даже с postgres 9.0, как указано в документах (http://www.postgresql.org/docs/9.0/static/sql-update.html)
также пункт 2, кажется, не работает. я получаю следующую ошибку: подзапрос должен возвращать только один столбец.
надеюсь, что у кого-то есть решение для меня. в противном случае запросы займут много времени :(.
FYI: я пытаюсь выбрать разные столбцы из нескольких таблиц и сохранить их во временную таблицу, чтобы другое приложение могло легко извлекать подготовленные данные.
3 ответов:
для обновления
использование:
UPDATE table1 SET col1 = othertable.col2, col2 = othertable.col3 FROM othertable WHERE othertable.col1 = 123;для вставки
использование:
INSERT INTO table1 (col1, col2) SELECT col1, col2 FROM othertableвам не нужно
VALUESсинтаксис, если вы используете SELECT для заполнения значений вставки.
ответ OMG Ponies работает отлично, но на всякий случай вам нужно что-то более сложное, вот пример немного более продвинутого запроса на обновление:
UPDATE table1 SET col1 = subquery.col2, col2 = subquery.col3 FROM ( SELECT t2.foo as col1, t3.bar as col2, t3.foobar as col3 FROM table2 t2 INNER JOIN table3 t3 ON t2.id = t3.t2_id WHERE t2.created_at > '2016-01-01' ) AS subquery WHERE table1.id = subquery.col1;
Comments