从表A到表B的SQL INSERT缺失行

问题描述:

我试图将行插入表'数据'中,如果它们不存在。从表A到表B的SQL INSERT缺失行

对于Export $中的每一行,我需要检查'Data'是否符合Period(date)和ID(int)的行的数据 - 如果这些行不存在,那么应该创建它们。

我很确定我的'NOT EXISTS'部分是错的 - 最好的方法是什么?感谢您的帮助

IF NOT EXISTS (SELECT * FROM Data, Export$ WHERE Data.ID = Export$.ID AND Data.Period = Export$.Period) 
    INSERT INTO Data (Period, Performance, ID) 
    SELECT Period, [Return], [ID] FROM Export$ 
+1

在你不存在部分看上去正常乍一看。你认为什么是错的? – 2013-02-12 23:43:41

+0

问题在于,如果任何行(可能是其他行)匹配(可能有很多可以导入的行),这将阻止插入任何行。 – GilM 2013-02-12 23:49:11

+0

哦!你是否试图从*'Export $'插入“missing records”*?如果是这样,请查阅'MERGE'。此外,Data和Exports之间的','有一个CROSS JOIN - 我建议不要这样的语法。 – 2013-02-12 23:53:51

试试这个:

INSERT INTO Data (Period, Performance, ID) 
SELECT Period, [Return], [ID] 
FROM Export$ e 
where not exists (
select * 
from Data 
where ID = e.ID and Period = e.Period) 
+0

工作完美!谢谢! – 2013-02-12 23:53:47

尝试类似,都需要调整,以适应你的表

insert into data 
select * from export 
left join data on data.id = export.id 
        and data.period = export.period 
where data.id is null