一尘不染

从PostgreSQL中的子查询更新或插入(多行和多列)

sql

我正在尝试在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)

但是,即使使用文档(http://www.postgresql.org/docs/9.0/static/sql-
update.html)中提到的postgres 9.0,也无法实现第1点

同样,第二点似乎不起作用。我收到以下错误:子查询必须仅返回一列。

希望有人对我有解决方法。否则查询将花费大量时间:(。

仅供参考:我正在尝试从几张表中选择不同的列,并将它们存储到一个临时表中,以便另一个应用程序可以轻松地获取准备好的数据。


阅读 158

收藏
2021-05-05

共1个答案

一尘不染

对于更新

使用:

UPDATE table1 
   SET col1 = othertable.col2,
       col2 = othertable.col3 
  FROM othertable 
 WHERE othertable.col1 = 123;

对于INSERT

使用:

INSERT INTO table1 (col1, col2) 
SELECT col1, col2 
  FROM othertable

VALUES如果使用SELECT来填充INSERT值,则不需要语法。

2021-05-05