当前位置: 首页 > 面试题库 >

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

叶煌
2023-03-14
问题内容

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

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

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

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


问题答案:

对于更新

使用:

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值,则不需要语法。



 类似资料:
  • 问题内容: 这种类型的东西之前已经被问过几次了,但并不是我要找的东西。我需要两行等于子查询的不同部分。 我目前正在使用: WHERE语句显然得到了简化……但是基本上它是相同的子查询,但是我不认为我应该运行两次? 我想做类似… 问题答案: 您只需将表加入子查询中即可进行一些计算,

  • 我希望在一条语句中更新PostgreSQL中的多行。有没有一种方法可以做到以下几点?

  • 我需要更新我的数据库,它是基于locationId的多行软删除 当我运行查询时,我得到一个错误: 错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项- 正如我所知,子查询将返回两条记录,因为子查询返回两条记录更新不会发生,但我如何解决这个问题。我试图解决这个问题,但没有成功。

  • 问题内容: 正如我已经发现的那样,可以通过执行类似的操作在一个查询中更新多行 特别感谢@Roman Pekar的明确回答。 现在,我正在尝试将这种更新与查询合并到NodeJS中的postgreSQL数据库中。 这是我的代码片段: 我没有收到错误,但是它不会更新我的表,我真的不知道这里出了什么问题。查询代码中可能存在语法错误?我只是在NodeJS pg包中更新时找不到多行查询的任何特定示例 问题答案

  • 我想在一条语句中更新PostgreSQL和Go中的多行。有没有办法做如下事情? 还有有没有一个例子,如果用go语言执行?

  • 现在我有了hibernate的工作批插入(“hibernate.jdbc.batch_size=50”),但据我所知,hibernate会批量生成单个插入。我知道我可以告诉我的db驱动程序为每批插入创建多行插入,以使用rewriteBatchedStatements:jdbc:p加快性能ostgresql://localhost:5432/mydb?rewriteBatchedStatements