【问题标题】:What is the best way to do a 'NOT IN' query on list of 150k id's在 150k id 列表上进行“NOT IN”查询的最佳方法是什么
【发布时间】:2016-02-26 15:32:45
【问题描述】:

使用 - SQL Server 2008 R2 - SQL Server Management Studio 查询窗格。
我有一个 excel 电子表格,其中包含超过 15 万个唯一 ID,用于我们的 Dynamics 2011 数据库中的联系人。我需要查询数据库中不在 150k 列表中的所有其他记录。做这个的最好方式是什么?我需要查询的记录没有任何活动,所以我正在努力弄清楚如何将它们拉出来。是否可以在 150k 项上使用 NOT IN?我应该将 150k id 添加到临时表中,然后使用 NOT IN temptable 吗?或者有没有更好的方法

【问题讨论】:

  • 我宁愿说去临时表。因为,如果您将所有 150K 记录都放入 NOT IN 中,将会很混乱且难以调试。第二件事是 NOT IN 的表现。所以,建议是 1)创建一个临时表并加载所有的 excel 数据。 2)在表之间使用 WHERE NOT EXISTS 可以为您提供一组不存在于其他表中的独特数据。祝你好运!!!

标签: sql-server-2008-r2 ssms notin


【解决方案1】:

您可以使用not in,但性能可能会很差。

最好使用not exists 或左连接过滤掉未连接的结果。您可能希望以某种方式将要排除的记录拉入数据库,或者通过导入表,或者写出临时/变量表以供工作。但无论如何...

示例表:

myRecordsToExclude
myTable

示例:

select t.*
from myTable t
where not exists (
    select 1
    from myRecordsToExclude e
    where t.id = e.id
)

select t.*
from myTable t
left join myRecordsToExclude e on t.id = e.id
where e.id is null

【讨论】:

  • 谢谢,虽然我以前没有使用过临时表,但我会试试这个,所以这将是一个很好的学习曲线。
  • 非常感谢,这工作做得很好,我从中学到了很多
猜你喜欢
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2017-11-01
  • 2011-01-31
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多