我有一个类似这样的查询:

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

这将返回两列SELECTid_default_value。然后我想使用这些数据作为id_type查询到另一个表的基础,INSERT,使用ntg_default_value作为键,id_default_value作为插入值。
以下几点就要到了,但还不完全到:
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版)

最佳答案

约束“pk_ntg_default_value”的名称可能表示您违反了表ntg_default_value的主键约束。
根据您的需求,您可以取消主键约束。或者,如果还没有,可以将其扩展为包含id&id_类型,并在必要时将group by添加到查询中,以防止重复的id_devault_value&id_类型对。您的查询变成:

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

10-07 19:34
查看更多