2013-02-12 40 views
7

我試圖將行插入表'數據'中,如果它們不存在。從表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

回答

9

試試這個:

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

5

嘗試類似,都需要調整,以適應你的表

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