【问题标题】:Multiple expressions with IN带有 IN 的多个表达式
【发布时间】: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 tsql sql-server-2005 sql-delete


【解决方案1】:

你可以为此做一个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

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2015-04-04
    • 2014-07-26
    • 1970-01-01
    相关资源
    最近更新 更多