IN的多个表达式

iva*_*nmp 7 sql t-sql 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)
Run Code Online (Sandbox Code Playgroud)

Lam*_*mak 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
Run Code Online (Sandbox Code Playgroud)