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

发布于 2024-10-17 10:07:59 字数 847 浏览 1 评论 0原文

我有一个像这样的 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。然后,我想使用此数据作为对另一个表 ntg_default_value 进行 INSERT 查询的基础,使用 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)

I have a SELECT query like this:

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

This returns 2 columns, id_default_value and id_type. I'd like to then use this data as the basis of an INSERT query into another table, ntg_default_value, using id_default_value as the key, and id_type as the inserted value.

The following is nearly there, but not quite:

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;

This gives me:

ERROR:  duplicate key value violates unique constraint "pk_ntg_default_value"

Is what I'm trying to do actually possible? If so, how do I construct the query?

(PostgreSQL 8.4.6)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

公布 2024-10-24 10:07:59

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

根据您的要求,您可以取消主键约束。或者您可以将其扩展为包含 id 和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

The name of the constraint 'pk_ntg_default_value' probably means you are violating the primary key constraint of the table ntg_default_value.

Depending on your requirements you can either take away the primary key constraint. Or you can expand it to include both id & id_type if it doesn't already and add a GROUP BY to your query, if necessary, to prevent duplicate id_devault_value & id_type pairs. Your query becomes then :

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文