【发布时间】:2012-03-28 23:14:26
【问题描述】:
我有两个结构相同的大表(4 多万条记录),它们有大约 300k 重复行。我想使用DELETE IN 语法DELETE 重复行。
我已经使用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)
【问题讨论】:
-
这是有效的标准 SQL 语法(如果您用双引号替换了这些方括号!)但在 SQL Server 中尚不支持,您可以投票here 将其包含在内。
-
如果您希望在 SQL Server 的未来版本中支持此语法,请投票和评论:connect.microsoft.com/SQLServer/feedback/details/299231/…
标签: sql tsql sql-server-2005 sql-delete