在有更多列的位置不存在MS SQL
我有一个表1,我需要从表1中获取数据,而ad到表2中只有表2中没有的行在有更多列的位置不存在MS SQL,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表1,我需要从表1中获取数据,而ad到表2中只有表2中没有的行 Table 1 ID Name N T A Bob 33 Y B Eva 44 N C John 47 Y B Alex 44 N D Bob 47 Y Table 2 ID Name N T A Bob 34 Y B Alex 44 N D Bob 47 Y 我尝试设置这种类型的版本脚本,但我得到了整
Table 1
ID Name N T
A Bob 33 Y
B Eva 44 N
C John 47 Y
B Alex 44 N
D Bob 47 Y
Table 2
ID Name N T
A Bob 34 Y
B Alex 44 N
D Bob 47 Y
我尝试设置这种类型的版本脚本,但我得到了整个表1+新行的重复性
INSERT INTO TABLE_2
(ID , Name , N , T)
SELECT table1.ID, table1.Name, table1.N, table1.T
FROM TABLE_1 table1
WHERE NOT EXISTS(SELECT 1
FROM TABLE_2 table2
WHERE (table2.ID = table1.ID) and (table2.Name = table1.Name) and (table2.N = table1.N )AND (table2.T = table1.T))
预期结果
A Bob 34 Y
B Alex 44 N
D Bob 47 Y
A Bob 33 Y
B Eva 44 N
C John 47 Y
一种方法是插入。。。使用SELECT查询进行选择,该查询标识表1中与表2中某些记录不完全匹配的所有记录
请注意,这里的逻辑是,如果表1中给定记录的哪怕一列与表2中的某个记录不一致,那么联接将失败,结果集中的所有表2列都将为空。WHERE子句仅限于表1中的此类不匹配记录。您可以使用左连接来连接这两个表。 必须插入表_1中与表_2不匹配的所有记录。要检查哪个记录不匹配,只需使用T2.ID为NULL
我已经测试了你的脚本,它可以工作了:谢谢你浪费我的时间阅读。没有它或负号的SQL可以使用左连接习惯用法。
INSERT INTO table2 (ID, Name, N, T)
SELECT t1.ID, t1.Name, t1.N, t1.T
FROM table1 t1
LEFT JOIN table2 t2
ON t1.ID = t2.ID AND
t1.Name = t2.Name AND
t1.N = t2.N AND
t1.T = t2.T
WHERE t2.ID IS NULL
INSERT INTO TABLE_2 (ID , Name , N , T)
SELECT T1.ID
,T1.Name
,T1.N
,T1.T
FROM TABLE_1 T1
LEFT JOIN TABLE_2 T2
ON T1.ID = T2.ID
AND T1.Name = T2.Name
AND T1.N = T2.N
AND T1.T = T2.T
WHERE T2.ID IS NULL
declare @Table1 table (ID varchar(100), Name varchar(100), N int, T varchar(100));
insert into @Table1 values
('A', 'Bob', 33, 'Y'),
('B', 'Eva', 44, 'N'),
('C', 'John', 47, 'Y'),
('B', 'Alex', 44, 'N'),
('D', 'Bob', 47, 'Y')
declare @Table2 table (ID varchar(100), Name varchar(100), N int, T varchar(100));
insert into @Table2 values
('A', 'Bob', 34, 'Y'),
('B', 'Alex', 44, 'N'),
('D', 'Bob', 47, 'Y')
insert into @Table2
select *
from @Table1 t1
where not exists (select *
from @Table2 t2
where t2.ID = t1.ID and t2.N= t1.N and t2.Name = t1.Name and t1.T = t2.T);