2014-02-27 54 views
0

嗨存在我有這樣一段代碼:MSSQL - 插入一行到一個表,如果該行不已經在表中

insert into table1(column1, column2) 
select distinct id, somevalue from table1 where id in (select id from table2) 

基本上是將所有的ID從表2至表1列1,而table1中的其他列爲所有行共享相同的值。

現在的問題是,我必須檢查table2中的id是否已經存在於table1中,並且只有在不存在時纔會插入。我怎樣才能做到這一點?

+1

正如你所寫的查詢'insert into。 。 。選擇ID。 。 。來自table1。 。 。*,*所有*的ID都將存在於表1中。你能編輯這個問題嗎? –

+0

您可能要使用'MERGE':http://msdn.microsoft.com/en-us/library/bb510625.aspx – aidan

回答

1

我認爲你正在嘗試做這樣的事情...

INSERT INTO table1(column1, column2) 
SELECT DISTINCT t2.id, t2.somevalue 
FROM table2 t2 LEFT JOIN table1 t1 
ON t2.id = t1.id 
where t1.id IS NULL 
0
INSERT INTO TABLE1(COLUMN1, COLUMN2) 
    SELECT distinct id, value 
    FROM Table2 
    WHERE id NOT IN (SELECT ID from table1) 
0

您例如插入是有點不清楚。它看起來像你將id插入Table1.Column1而不是Table1.id。但是,假設樣本是正確的。有很多方法可以做到這一點。

這是一個有點不同,可能更快。因爲在這類簡單的數據上使用了GROUP BY而不是DISTINCT,並且使用NOT EXISTS而不是NOT IN或LEFT JOIN。

INSERT INTO Table1 (Column1, Column2) 
SELECT id 
     ,value 
    FROM Table2 
WHERE NOT EXISTS (SELECT ID FROM Table1 WHERE Table1.Id = Table2.Id) 
GROUP BY id 
     ,value 
相關問題