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 如何遍历数组并将每个数组值插入表中?