2017-05-24 138 views
0

我想弄清楚如何從臨時表(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

回答

3

問題是您的內部查詢不以任何方式依賴於臨時表。基本上,你寫的是「如果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

相關問題