我目前正在开发一个报告生成servlet,它将多个表中的信息聚合在一起,生成一个报告.除了返回结果行之外,我还将它们存储到一个reports表中,这样以后就不需要重新生成它们,并且如果从中提取它们的表被删除,它们将保持不变.为了实现后者,我有一个如下形式的语句(NB:x是外部生成的,在这个语句中实际上是一个常量):

INSERT INTO reports
   (report_id, col_a, col_b, col_c)
SELECT x as report_id, foo.a, bar.b, bar.c
FROM foo, bar

这很好,但是我需要第二个查询来实际返回结果行,例如.

SELECT col_a, col_b, col_c
FROM reports
WHERE report_id = x

这很好用,因为它只涉及一个表,成本应该不高,但似乎我应该能够直接返回插入的结果,避免第二次查询.有什么语法我找不到吗?(我应该注意的是,我对数据库工作相当陌生,所以如果正确的答案是只运行第二个查询,因为它只稍微慢一点,那就这样吧)

推荐答案

In PostgreSQL with version >= 8.2, you can use this construct:

INSERT INTO reports (report_id, col_a, col_b, col_c)
SELECT x as report_id, foo.a, bar.b, bar.c
FROM foo, bar
RETURNING col_a, col_b, col_c

Postgresql相关问答推荐

Postgres BULK INSERT如何影响Debezium?

Pogresql性能中的枚举与文本数据类型

PostgreSQL无效语法

转到 time.Time to postgresql timestamptz 无法用 time.Now() 保存

GORM 不会创建 many2many 关联

PostgreSQL - 如何获得前一个月和一周的价值?

使用 postgresql Select 整数作为位和状态表

使用间隔参数的 go postgres 准备好的语句不起作用

UPDATE implies move across partitions

Postgres COPY FROM csv file-No such file or directory

PostgreSQL:使用 psql 命令行实用程序时 Windows 上的编码问题

Postgres 日期重叠约束

理解 Postgres 行大小

将属性添加到 Sequelize FindOne 返回的对象

如何在带有 PostgreSQL 数据库的 Web 应用程序中拥有完整的离线功能?

如何判断 PostgreSQL 事务中的待处理操作

从长时间的postgres转换日期

Postgresql滚动删除旧行?

如何在 postgresql 中获取整个表的哈希?

Rails 5 db 迁移:如何修复 ActiveRecord::ConcurrentMigrationError