如何使用SQL将记录插入一个表到另一个表?

时间:2016-05-21 09:25:47

标签: sql-server

我有两个名为Table1&的表名。表2。

表1:

ID   NAME    AGE
-----------------
1    ABC     30
2    XYZ     40
3    XXX     50
4    aaa     60

表2:

ID   NAME    AGE
-----------------
1    ABC     30
2    XYZ     40
3    XXX     50

我必须将Table1记录插入Table2。但我不需要插入现有项目。我必须只向Table2插入不匹配的数据。怎么做。

E.g: 表2我已经有ID 1,2,3但不是4.我必须只插入ID第4行。

3 个答案:

答案 0 :(得分:1)

也许

INSERT INTO Table2
SELECT * FROM Table1 WHERE ID NOT IN (SELECT ID FROM Table2)

答案 1 :(得分:0)

试试这个

insert into Table2 
select * from Table1 t1 
where not exists (select 1 from Table2 t2 where t2.ID=t1.ID)

答案 2 :(得分:0)

您也可以使用LEFT JOIN来实现此目的。性能方面,这比使用IN运算符要好。

INSERT INTO Table2 (ID, NAME, AGE)
SELECT T1.ID, T1.NAME, T1.AGE
FROM Table1 T1
LEFT JOIN Table2 T2 ON T2.ID = T1.ID
WHERE T2.ID IS NULL

使用给定的样本数据执行执行:

DECLARE @Table1 TABLE (ID INT, NAME VARCHAR(50), AGE INT)

INSERT INTO @Table1 (ID, NAME, AGE)
VALUES
(1, 'ABC', 30),
(2, 'XYZ', 40),
(3, 'XXX', 50),
(4, 'aaa', 60)

DECLARE @Table2 TABLE (ID INT, NAME VARCHAR(50), AGE INT)

INSERT INTO @Table2 (ID, NAME, AGE)
VALUES
(1, 'ABC', 30),
(2, 'XYZ', 40),
(3, 'XXX', 50)

-- SELECT * FROM @Table2

INSERT INTO @Table2 (ID, NAME, AGE)
SELECT T1.ID, T1.NAME, T1.AGE
FROM @Table1 T1
LEFT JOIN @Table2 T2 ON T2.ID = T1.ID
WHERE T2.ID IS NULL

-- SELECT * FROM @Table2