我有两个相当大的(400多万条记录)表,结构相同,并且它们有大约300k重复的行。我想使用DELETE
语法DELETE IN
重复行。
我已经使用MERGE
语句(仅在2008或更新时可用,因此我不能使用它,因为我仍在运行2005)和DELETE EXISTS
,但是我在使DELETE IN
工作时遇到了一些麻烦。
我与DELETE IN
的问题是我的大表有一个复合主键,这意味着我只能使用所有这些列来识别唯一的行。
在T-SQL中是否可以将多个表达式作为IN
子句的参数?类似的东西:
DELETE FROM MyBigTable
WHERE ([Column1], [Column2], [Column3]) IN
(SELECT [Column1],
[Column2],
[Column3]
FROM MyBigTable
INTERSECT
SELECT [Column1],
[Column2],
[Column3]
FROM MyOtherBigTable)
答案 0 :(得分:14)
您可以为此执行JOIN
:
DELETE A
FROM MyBigTable A
INNER JOIN MyOtherBigTable B
ON A.Column1 = B.Column1 AND A.Column2 = B.Column2 AND A.Column3 = B.Column3