我正在使用SQL Server 2017,并且我一直在努力解决这个问题。我的目标是比较2个表,只插入基于UNIQUE单元格的NEW行。所有列都有一个ID号,但我没有分配主键。我的目标是只在没有条件匹配的情况下添加包含UNIQUE单元格的额外行。这就是我的表格现在的设置方式。
旧数据(表名为Test1)
FName LNname Address City State Zipcode Phone Phone2 ID
Frank Smith 444 Main Y'all TX 77484 281-788-9898 NULL 1
Thomas Parker 343 Tire Y'all TX 77484 281-788-5453 NULL 2
Ben Krull 232 Wheel Y'all TX 77484 281-788-9535 NULL 3
新数据(表名为Test2)
FName LNname Address City State Zipcode Phone Phone2 ID
Frank Smith 444 Main Y'all TX 77484 281-788-9898 NULL 1
Thomas Parker 343 Tire Y'all TX 77484 281-788-5453 NULL 2
Ben Krull 232 Wheel Y'all TX 77484 281-788-9535 NULL 3
Juan Roberto 444 Gas Y'all TX 77484 281-788-3434 NULL 4
Ben Krull 232 Wheel Y'all TX 77484 281-788-9535 713-545-4353 5
如您所见,ID 1,2和3在两个表中都是相同的。由于Phone2条目,ID-4是一个完全唯一的行,ID-5也是如此。我找到了一些代码并对其进行了一些修改以匹配我关心的标题,以帮助我确定哪些条目是重复的。这个代码一直让我发疯。
INSERT TEST1 (Name
,Last_Name
,Address
,City
,State
,Zip_Code
,Phone
,Phone2
)
SELECT Name
,Last_Name
,Address
,City
,State
,Zip_Code
,Phone
,Phone2
FROM TEST2
WHERE TEST2.NAME not in (select Name from test1)
AND TEST2.Address not in (select Address from test1)
AND TEST2.City not in (select City from test1)
AND TEST2.State not in (select State from test1)
AND TEST2.Zip_Code not in (select Zip_Code from test1)
AND TEST2.Phone not in (select Phone from test1)
AND TEST2.Phone2 not in (select phone2 from test1)
我尝试匹配所有字段,如果找到唯一的CELL,则将新行输入old_data表。执行它后我没有看到任何错误,但也没有任何反应。有趣的是,如果我删除行下面的所有代码," WHERE TEST2.NAME不在(从test1中选择Name)" ID-4(胡安罗伯托)被转移,但ID-5没有任何反应。
我真的开始认为WHERE不能用于比较重复项并修改或添加条目,但我可能错了。合并功能会很棒,但我对前者非常满意,因为我总是可以运行不同的脚本来清理表格以获得欺骗。我希望有人能够指出我正确的方向,因为我在不同的表中有数百万行需要进行比较和修剪。谢谢。
答案 0 :(得分:0)
试试以下代码,我不确定它是否会对你有用,因为我没有测试过它
SELECT * INTO #TEMP FROM Test2(NOLOCK);
DELETE #TEMP
FROM #TEMP
INNER JOIN Test1
ON #TEMP.NAME = Test1.NAME
AND #TEMP.Address = Test1.Address
AND #TEMP.City = Test1.City
AND #TEMP.State = Test1.State
AND #TEMP.Zip_Code = Test1.Zip_Code
AND #TEMP.Phone = Test1.Phone
AND #TEMP.Phone2 = Test1.Phone2 ;
INSERT INTO Test1
SELECT * FROM #TEMP;