0

我遇到以下问题(在 PostgreSQL 中)。

目的:

  • 从临时表中读取数据tmp
  • 将此处理到另一个表y
  • 使用nextvalfrom 表y与来自 的数据相结合tmp

我认为这可以完成这项工作:

INSERT INTO y (v1, v2) VALUES (nextval(y.v1), SELECT v2 FROM tmp)

也试过:

INSERT INTO y (v1, v2) VALUES (SELECT nextval(y.v1), v2 FROM tmp)

谁能解释如何做到这一点?

4

1 回答 1

0

您显示的代码中有两个误解/错误:

  1. nextval()需要序列的名称,而不是列名。
  2. 如果select语句用于为语句提供数据insert,则不能使用values()

你想要的是:

insert into y (v1, v2) 
select nextval(...), v2 
from tmp;

我不清楚“使用表 y 中的 nextval ”是什么意思。如前所述,nextval() 对序列进行操作,而不是对表或列进行操作。如果您的意思是“从与 y.v1 关联的序列中获取 nextval ”并y.v1定义为serial列,您可以执行以下操作:

insert into y (v1, v2) 
select nextval(pg_get_serial_sequence('y','v1')), v2 
from tmp;

但这需要v1定义为serial

于 2016-04-13T12:22:40.753 回答