从另一个表中插入不存在记录的表

从另一个表中插入不存在记录的表

问题描述:

我想弄清楚如何从临时表(temp)插入现有表(tbl01),其中记录不存在于现有表表(tbl01)。我希望这是有道理的。我基本上是试图用自上次更新表格以来发生的记录更新表格。这里是我到目前为止的代码:从另一个表中插入不存在记录的表

insert into tbl01 
(sale_store, sale_dt, sale_register, sale_trans) 
select distinct 
sale_store, sale_dt, sale_register, sale_trans 
from temp 
where NOT EXISTS (select * from tbl01) 

是我遇到的问题是它的运行,但不会把任何新的记录到表 - 应该会有很多的新纪录。我相信这是一个小而愚蠢的我错过了。我用这篇文章作为我的指南:How to avoid duplicates in INSERT INTO SELECT query in SQL Server?

提前谢谢!

+0

你如何确定'tbl01'中的一条独特记录。它是'sales_store'还是多个字段? 'NOT EXISTS(SELECT ...)'运行select语句,如果它有任何记录,那么'NOT EXISTS'失败,所以你要么需要一个相关的子查询,要么使用一个' NOT IN(SELECT FROM ... )' – JNevill

+0

这四个字段一起创建一个'独特'记录。因此,我需要包含以下所有四个字段: 不存在(从tbl01选择sale_store,sale_dt,sale_register,sale_trans – DJDJ23

+1

如果您的目标是作为SET表创建的,并且您的PK包含所有列,那么您可以INSERT/SELECT没有WHERE,重复的行被SET表丢弃了。 – dnoeth

问题是您的内部查询不以任何方式依赖于临时表。基本上,你写的是“如果tbl01中没有记录,则插入tbl01”。要解决这个问题,你需要在exists里面添加一个where子句:

insert into tbl01 
(sale_store, sale_dt, sale_register, sale_trans) 
select distinct 
sale_store, sale_dt, sale_register, sale_trans 
from temp 
where NOT EXISTS (
    select * 
    from tbl01 
    where temp.sale_store = tbl01.sale_store 
    and temp.sale_dt = tbl01.sale_dt 
    and temp.sale_register = tbl01.sale_register 
    and temp.sale_trans = tbl01.sale_trans) 
+0

根据问题中的注释,主键是所有4个字段。 – JNevill

+0

@JNevill谢谢,相应地编辑了我的答案。 –

+0

谢谢,Zohar!确保密钥不存在是有意义的。完美! – DJDJ23