同时插入新表和联接表

时间:2018-12-06 13:03:19

标签: sql postgresql

我有一个名为买方的表和一个名为卖方的表,我想引入一个名为联系人的表,该表包含这两个联系人的详细信息买卖双方。

首先要关注买家,我想要一个联接表 buyers_contacts 将买方加入联系人。

我想首先为每个买家在联系人表中填写一个条目。然后,对于每个联系人,我想在Buyers_contacts中创建一行。

我应该怎么做?

到目前为止,我已经提出了该查询(语法错误)。

with buyer as (
    select name, id from buyers
)
, new_contact as (
    insert into contacts (name) select name from buyer
    returning id as contact_id, buyer.id as buyer_id
)
insert into buyers_contacts (buyer_id, contact_id) values 
(new_contact.buyer_id, new_contact.contact_id);

我曾考虑过分两个阶段进行此更新,首先为每个买家创建一个联系人,然后将其插入Buyers_contacts表中,但是我不能依靠买家来拥有唯一的名称。

我认为这应该是一个已解决的问题,但是,似乎没有适合这种情况的例子。

Postgres是我正在使用的数据库。

1 个答案:

答案 0 :(得分:0)

假设幕后有一些序列在创建新记录时生成联系人ID:

create sequence contact_id;

我想添加买家所需要做的就是这样:

insert into contacts (contact_id, buyer_id)
select
  nextval ('contact_id'), b.id
from buyer b
where not exists (
  select null
  from contacts c
  where c.buyer_id = b.id
)

这将随时为尚未添加到表格中的买家创建新的联系记录。

您还可以仅依赖默认值:

insert into contacts (buyer_id)
select
  b.id
from buyer b
where not exists (
  select null
  from contacts c
  where c.buyer_id = b.id
)