【问题标题】:SQL where in (thousands of records)SQL where in(数千条记录)
【发布时间】:2019-08-10 02:11:10
【问题描述】:

我现在处于困境中,非常感谢您的建议。 从我们的管理人员那里得到了一份包含 500000 个电子邮件地址的列表,并在我们的数据库中检查它们是否在那里注册。 问题在于用户数量,原因 “select * from db..tablename where email in (.....)” 不适用于那么大的列表。 到目前为止,我唯一的想法是将列表拆分为更小的部分,但这似乎非常无效且耗时。 有什么方法可以让它更快更智能?

【问题讨论】:

  • 将数据加载到表中并使用join、in 或exists。
  • 你能告诉我们一些你尝试过的东西吗?或者让我们了解正在使用的数据库结构(即表、列等)?
  • 嗨,戈登,这是我的第一个想法,但是当您向表中插入时,每次加载的行数限制为 1000 行,所以这对我来说是个大问题。我能做些什么来避免限制?嗨 hmiedema9, 基本上,要完成这项工作,我需要使用一张大桌子(我们称之为“客户”)并搜索它。它有一个简单的结构:用户 ID、名字、姓氏、电子邮件、国家、注册日期。我试图列出我们数据库中存在的客户列表:选择用户 ID,来自 db..clients 的电子邮件,其中电子邮件在 (.....)
  • @Tanya this blog article 可能会为您提供快速插入的解决方案。基本上,您必须在一个循环中进行 1000 行的批量插入。将所有内容插入表格后,继续 Gordon 解释的方式(-> 加入、加入或存在)
  • @David3103 谢谢你的文章,我会检查的!

标签: sql where-in


【解决方案1】:

感谢您的想法! 我刚刚想出了一个无需任何额外人工操作即可工作的解决方案。

我创建了一个包含整个 500k 电子邮件列表的新帮助表,并使用以下语句将其插入其中(它帮助我避免了普通插入语句中的 1000 行限制):

insert INTO db..emaillist
select 'email1@gmail.com' union all
select 'email2@gmail.com' union all
..........
select 'email3@hotmail.com' 

现在我要使用:

Select userID, email
from bd..clients 
where email in (select email from db..emaillist)

获取我们数据库中存在的用户列表。

【讨论】:

    猜你喜欢
    • 2015-10-10
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多