我有一个类似这样的查询:
SELECT id_default_value, id_type FROM ntg_attribute, ntg_module_attribute
WHERE ntg_attribute.id_module_attribute = ntg_module_attribute.id;
这将返回两列
SELECT
和id_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