【发布时间】:2017-05-24 14:27:57
【问题描述】:
我试图弄清楚如何从现有表 (tbl01) 中不存在记录的临时表 (temp) 中插入现有表 (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中的不同记录。是sales_store,还是多个字段?NOT EXISTS (SELECT ...)运行 select 语句,如果它有任何记录,则NOT EXISTS失败,因此您需要相关子查询,或者使用'NOT IN (SELECT FROM...)`跨度> -
这四个字段共同创建了一个“不同的”记录。因此,我需要将所有这四个字段都包括在内,例如: where not exists (select sale_store, sale_dt, sale_register, sale_trans from tbl01
-
如果您的目标是作为 SET 表创建的,并且您的 PK 包含所有列,您可以简单地 INSERT/SELECT 而没有 WHERE,重复的行将被 SET 表静默丢弃。
标签: sql insert teradata sql-insert insert-into