2014-02-27 31 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 
相关问题