PostgreSQL。在联结表中插入值

Posted

技术标签:

【中文标题】PostgreSQL。在联结表中插入值【英文标题】:PostgreSQL. Insert valuse in junction table 【发布时间】:2019-05-24 03:16:36 【问题描述】:

美好的一天。我在联结表中插入数据时遇到了一些问题。

这是我的桌子:

users table

    -----------------------
    |user_id   |FullName |
    -----------------------
    |1      | John    |
    |2      | Michael |
    |3      | Bryce   |

addresses table

    -----------------------------------------
    |address_id|    country    |    city     |
    -----------------------------------------
    |    1     |      USA      |    New-York |
    |    2     |     Russia    |    Moscow   |
    |    3     |    Germany    |    Berlin   |
    |    4     |      UK       |    London   |

This is the Junction table to connect the 
    two now.

"user_address"

    ------------------------
    | user_id | address_id |
    ------------------------
    |   1     |      1     |
    |   1     |      2     |
    |   2     |      3     |
    |   3     |      1     |

我想连接它们然后我创建地址。所以,我需要在address table和他们中创建一个新地址,将创建地址的ID放在连接处(不要关心user_id,我只需要处理address_id)。

这是我用于创建地址的查询:

"INSERT INTO addresses (country, city) VALUES (?, ?) RETURNING id, country, city"

如您所见,我需要返回创建地址的值以将它们展示给我的消费者。

如何插入新地址、获取其 ID 并将其放入我的路口?需要在单个查询中。

【问题讨论】:

users 中的user_ids 与联结表不匹配。你们应该如何相处? @KaushikNayak 啊,对不起,我复制了错误的表格。已编辑。 @KaushikNayak 我正在使用 Java。我的地址实体有一组 user_ids (但用户不知道他的地址 - 一种方式绑定,我只将此集合用于 java 部分,所以我的表中没有集合或其他东西,只有上面列出的字段),和当我创建地址时,我将从该集合中获取 user_ids 并将它们也作为创建地址的 id 放在连接处。 【参考方案1】:

插入with 子句会有所帮助。

with ins AS
(
 INSERT INTO addresses (country, city) 
     VALUES ('USA', 'New-York') RETURNING address_id, country, city
),
ins2 AS
(
 INSERT INTO user_address (address_id) select address_id from ins
)
select * from ins

注意:

你说

..不管user_id,我只需要处理address_id

所以,我想你有另一种机制来更新user_ids

DEMO

【讨论】:

以上是关于PostgreSQL。在联结表中插入值的主要内容,如果未能解决你的问题,请参考以下文章

Postgres 9.6 如何遍历数组并将每个数组值插入表中?

使用python将单个变量插入PostgreSQL中的表

如何一次将多个值插入到 postgres 表中?

如何使用 Node.js 将特定键:Json 的值插入到 postgres 表中

将所有记录插入到 Symfony 中的联结表中

基于 Postgres 触发器的分区,插入 NEW.* 给出值 (10,,,)