我有一个名为买方的表和一个名为卖方的表,我想引入一个名为联系人的表,该表包含这两个联系人的详细信息买卖双方。
首先要关注买家,我想要一个联接表 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是我正在使用的数据库。
答案 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
)