IN的多个表达式

时间:2012-03-12 14:32:28

标签: sql tsql sql-server-2005 sql-delete

我有两个相当大的(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)

1 个答案:

答案 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