sql - 带有 IN 的多个表达式

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

我有两个结构相同的大表(4+ 百万条记录),它们有大约 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)

最佳答案

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

关于sql - 带有 IN 的多个表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669031/

相关文章:

c# - 优化复杂查询

sql-server-2005 - 为什么 SQLCLR 过程比相同代码的客户端运行得慢

c# - ASP.NET SQL 问题和代码帮助

sql - 如何从SQLite数据库获取最后一个表

sql-server - 有没有办法在脚本中暂停或等待几分钟?

sql-server - 如何检查 SQL Server 中的阻塞查询

sql-server - 在SQL Server中查找对象(跨数据库)

mysql - 限制mysql中的行数后进行排序

sql - SQL 中的 SELECT 语句用于过滤掉多个条目

sql - 从当前日期开始创建相隔一个月的日期列表