我有两个名为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行。
答案 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