MSSQL - 如果表中不存在行,则在表中插入一行

时间:2014-02-27 22:40:36

标签: sql sql-server

嗨,我有这段代码:

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

基本上是将table2中的所有id添加到table1 column1,而table1中的其他列共享所有行的相同值。

现在的问题是我必须检查table1中的id是否已经存在于table1中,并且只有在不存在时才会插入。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

INSERT INTO TABLE1(COLUMN1, COLUMN2)
    SELECT distinct id, value 
    FROM Table2 
    WHERE id NOT IN (SELECT ID from table1)

答案 2 :(得分: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