【问题标题】:Using nextval to insert new data in table from temp table使用 nextval 从临时表中插入新数据到表中
【发布时间】:2016-04-13 11:57:29
【问题描述】:

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

目的:

  • 从临时表tmp读取数据
  • 将此处理到另一个表y
  • 使用表y 中的nextval 结合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)

谁能解释一下怎么做?

【问题讨论】:

  • 对于从 tmp 读取的所有记录,是否需要单个值 v1
  • 是的,这个查询是循环的,所以我需要一个值(下一个 ID)。

标签: sql postgresql sql-insert nextval


【解决方案1】:

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

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

认为你想要的是:

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

我不清楚“使用表 y 中的下一个值”是什么意思。如前所述,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

【讨论】:

  • 谢谢,今天晚些时候我会深入研究这个。您的意见确实让我明白了一些事情!
猜你喜欢
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 2012-07-31
相关资源
最近更新 更多