2017-12-27 83 views
1

從select中插入數據時,有沒有一種方法或命令可以忽略重複的主鍵錯誤?忽略從select語句插入時的錯誤SQL

說明 讓我們假設我有這個疑問:Insert into my_table values (select * from my_second_table)my_tableid主鍵。另外my_second_table有一個名爲id的列,因此嘗試插入時會導致重複的主鍵錯誤。

我知道我可以使用go避免這些問題,但在這種情況下,我不能使用它,因爲是從選擇插入,或至少是我所知道的。

有什麼我可以做的嗎?

+0

在這種情況下使用合併語句 –

+1

您使用的是什麼RDBMS?如果Sql服務器可以使用MsSql查看'ignore_dup_key = on' –

+0

@MartinSmith即時消息 –

回答

2

不同的數據庫有不同的衝突解決方法。在大多數數據庫以下工作:

Insert into my_table values (. . .) -- you should always list all the columns 
    select . . . -- you should list all the columns 
    from my_second_table t2 
    where not exists (select 1 from my_table t where t.id = t2.id); 

這不是一個完美的解決方案,因爲比賽的條件可能會導致問題。但是,如果在執行此操作時沒有其他數據修改查詢在服務器上運行,它將起作用。

+0

尼斯,我想過要做那樣的事情。問題是消耗太多時間和資源來執行這個動作,但我會試一試。 –

+0

@LuisfelipeDejesusMunoz。 。 。你只需要一個'my_table(id)'的索引。 –

+0

其實我只是用id作爲例子。我真正的主鍵是一個5列的聚簇鍵,表上已經有一個索引和一些聚簇索引 –