从另一个表中插入不存在记录的表
问题描述:
我想弄清楚如何从临时表(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?
提前谢谢!
答
问题是您的内部查询不以任何方式依赖于临时表。基本上,你写的是“如果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)
你如何确定'tbl01'中的一条独特记录。它是'sales_store'还是多个字段? 'NOT EXISTS(SELECT ...)'运行select语句,如果它有任何记录,那么'NOT EXISTS'失败,所以你要么需要一个相关的子查询,要么使用一个' NOT IN(SELECT FROM ... )' –
JNevill
这四个字段一起创建一个'独特'记录。因此,我需要包含以下所有四个字段: 不存在(从tbl01选择sale_store,sale_dt,sale_register,sale_trans – DJDJ23
如果您的目标是作为SET表创建的,并且您的PK包含所有列,那么您可以INSERT/SELECT没有WHERE,重复的行被SET表丢弃了。 – dnoeth