如何基于另一个表中的值在表中插入值

时间:2019-04-25 21:11:01

标签: sqlite

我需要在一个表中为不满足特定条件的另一表中的所有条目插入额外的记录,即它们在表中尚不存在。

我有3个表,其中一个称为ARTICLES,并且具有列(ArtNrArtName),第二个表称为CUSTOMERS,其中包含列({{1 }},CustNrCustName) 第三张表CustAddress是“客户”表与“商品”表之间的链接,并具有每个客户和所有“商品”所拥有的记录。因此它具有列(CUSTARTLINKCustNt)。

这样,在应用程序中,当选择一个客户时,将只显示表中与该客户具有链接的商品。

所有这些功能均有效,包括分别添加和删除商品及客户。表,并向客户添加文章(在ArtNr表中创建条目。

我想添加一项功能,即可以从“文章”表中选择一个“文章”,并将其添加到“客户”表中现有的所有客户(因此,只要没有CUSTARTLINK表中的新条目,已经存在。

我尝试使用INSERT并结合WHERE条件将其创建,但是我离我想要达到的目标还差得远。

任何人都可以列出要实现此目标的SQL命令吗?

2 个答案:

答案 0 :(得分:1)

INSERT INTO CUSTARTLINK (CustNt, ArtNr)
(SELECT CustNr, X from CUSTOMERS)

用商品ID替换X

答案 1 :(得分:0)

假设您要为所有客户插入artnr = 11

insert into custartlink (custnr, artnr)
select c.custnr, 11
from customers c 
where not exists (
  select 1 from custartlink 
  where custnr = c.custnr and artnr = 11
)

条件where not exists...确保执行语句后没有重复项,或者如果表custartlink中已经存在约束,则尝试违反该约束将没有错误。
使用except可以达到相同的目的:

insert into custartlink (custnr, artnr)
select custnr, 11
from customers
except
select custnr, 11
from custartlink
where artnr = 11

如果您的文章名称类似于'art11',并且您想使用该名称而不是artnr,则可以执行以下操作:

insert into custartlink (custnr, artnr)
select 
  c.custnr, 
  (select artnr from articles where artname = 'art11')
from customers c
where not exists (
  select 1 from custartlink 
  where 
    custnr = c.custnr 
    and 
    artnr = (select artnr from articles where artname = 'art11')
)