我可以使用来自两个连接表的数据编写插入查询吗?

时间:2011-02-11 21:16:40

标签: sql database postgresql insert

我有SELECT这样的查询:

SELECT id_default_value, id_type FROM ntg_attribute, ntg_module_attribute 
WHERE ntg_attribute.id_module_attribute = ntg_module_attribute.id;

这会返回2列,id_default_valueid_type。然后,我想使用此数据作为INSERT查询另一个表格ntg_default_value的基础,使用id_default_value作为关键字,id_type作为插入值

以下几乎就在那里,但并不完全:

INSERT INTO ntg_default_value (id, id_type) 
SELECT id_default_value, id_type FROM ntg_attribute, ntg_module_attribute 
WHERE ntg_attribute.id_module_attribute = ntg_module_attribute.id;

这给了我:

ERROR:  duplicate key value violates unique constraint "pk_ntg_default_value"

我正在尝试做的事实可能吗?如果是,我该如何构建查询?

(PostgreSQL 8.4.6)

1 个答案:

答案 0 :(得分:1)

约束'pk_ntg_default_value'的名称可能意味着您违反了表ntg_default_value的主键约束。

根据您的要求,您可以取消主键约束。或者你可以扩展它以包括id和amp; id_type如果还没有,请在查询中添加GROUP BY,以防止重复的id_devault_value& id_type对。您的查询将成为:

INSERT INTO ntg_default_value (id, id_type)
SELECT id_default_value, id_type 
FROM ntg_attribute, ntg_module_attribute 
WHERE ntg_attribute.id_module_attribute = 
      ntg_module_attribute.id 
GROUP BY id_default_value, id_type