如何在insert中包含select语句的值?(PostgreSQL)

如何在insert中包含select语句的值?(PostgreSQL),postgresql,Postgresql,我有这样一句话: select it.item_id from item as it where it.owning_collection in (select col.collection_id from collection as col where col.name like '%Restricted%' 返回3k左右的结果。现在,我想在另一个表中插入这些结果中的每一个,并将该项_id作为如下参数之一: insert into metadatavalue (metadata_value_

我有这样一句话:

select it.item_id
from item as it
where it.owning_collection in (select col.collection_id
from collection as col
where col.name like '%Restricted%'
返回3k左右的结果。现在,我想在另一个表中插入这些结果中的每一个,并将该项_id作为如下参数之一:

insert into metadatavalue (metadata_value_id, **item_id**, metadata_field_id, text_value, text_lang, place, confidence)
但由于我对数据库不是很有经验,我不知道如何进行这些多次插入

insert语句中需要的所有其他信息都是固定值

表结构:

Table Item
*item_id
*submitter_id
*in_archive
*withdrawn
*last_modified
*owning_collection
*dicoverable

Table metadata
*metadata_value_id
*item_id
*metadata_field_id
*text_value
*text_lang
*place
*authority
*confidence
将“撇号”列替换为其默认值

.

插入元数据值(项目id、元数据字段id、文本值、文本语言、位置、置信度)
选择它。项目\u id,
从项目本身开始
在col.collection\u id=it.owning\u collection上以col的形式加入集合
其中列名为“%Restricted%”

用常量值替换
等。另外请注意,我已将您的
选择
查询重写为更有效的
联接

如何获得其他列?其他列没有问题,它们将是固定值。您的意思是
项id
是表
元数据值
中的列名吗?或者在
INSERT
语句中是否缺少
VALUES
SELECT
子句?是的,这就是我从SELECT语句中获取的数据。我只是没有包括语句中的值部分,因为我不确定它是否应该这样解决。如果
item_id
是一个列名,那么从哪里获得要插入的值?非常感谢!它就像一个符咒!我只是做了一些小的调整。语句末尾缺少一个括号,我删除了元数据\u value\u id,因为这是一个自动增量值。非常感谢!我现在知道如何对从查询中获得的值进行多次插入!下次我会尝试这种优化!你真的帮了大忙,欢迎你!查看
SELECT
documentation页面上的
JOIN
子句,它通常比
WHERE somecolumn IN(子查询)
上的过滤器快得多。
insert into metadatavalue (metadata_value_id, item_id, metadata_field_id, text_value, text_lang, place, confidence)
select 'metadata_value_id',it.item_id,'metadata_field_id','text_value', 'text_lang', 'place', 'confidence'
from item it
where it.owning_collection in (select col.collection_id
from collection as col
where col.name like '%Restricted%')
INSERT INTO metadatavalue (item_id, metadata_field_id, text_value, text_lang, place, confidence)
  SELECT it.item_id, <c1>, <c2>, <c3>, <c4>, <c5>
  FROM item AS it
  JOIN collection AS col ON col.collection_id = it.owning_collection
  WHERE col.name LIKE '%Restricted%'