代码之家  ›  专栏  ›  技术社区  ›  Gabe Moothart

数据库中信息*而不是*的SQL查询

  •  3
  • Gabe Moothart  · 技术社区  · 15 年前

    我有一个 大名单 电子邮件地址,我需要确定其中哪些是 已经在我的数据库中。我可以构造一个查询来告诉我这些信息吗?

    我正在使用 SQL Server 2000 ,如果它需要非标准扩展

    6 回复  |  直到 15 年前
        1
  •  4
  •   jao Gary Kindel    15 年前

    创建临时表,将电子邮件地址加载到临时表中,然后执行不在查询中的操作,例如

    SELECT emailaddress FROM temp_table WHERE emailaddress NOT IN (SELECT emailaddress FROM table)
    

    你可以通过插入

        2
  •  5
  •   Dave Jarvis James Eichele    15 年前

    对于一个巨大的列表,我建议将该列表加载到第二个表中(例如, TEMP_EMAIL_ADDRESS ),然后使用:

    SELECT
      EMAIL
    FROM
      TEMP_EMAIL_ADDRESS
    WHERE
      EMAIL NOT IN (SELECT EMAIL FROM EMAIL_ADDRESS)
    

    数据转换

    如果数据位于名为 电子邮件地址 (每行一行),可以使用以下DOS命令创建INSERT语句:

    FOR /F %i IN (emails.txt) DO echo INSERT INTO TEMP_EMAIL_ADDRESS (EMAIL) VALUES ('%i') >> insert-email.sql
    

    该命令将创建一个名为 插入-email.sql 在当前目录中,包含将现有电子邮件地址列表插入数据库所需的所有插入。

        3
  •  2
  •   TheTXI    15 年前

    为什么不把电子邮件地址作为一个表导入,然后对照已有的表检查一下呢?

    除此之外,您可以将电子邮件地址列表作为XML数据类型或表数据类型传入,并对此进行查询。

        4
  •  1
  •   yfeldblum    15 年前

    创建一个包含所有查询电子邮件地址的“newaddresses”表。

    这样做:

    (在我的头脑中,语法可能不是100%正确的;希望能给你正确的想法)

    select n.email
    from newaddresses n
    left join alreadysubscribed a
        on n.email = a.email
    where a.email is null
    

    这将连接电子邮件地址上的两个表,然后只提供连接失败的条目列表。

        5
  •  0
  •   dpetek    15 年前

    也许你可以在电子邮件上创建一个索引:

    CREATE INDEX email_index ON my_table(email)
    

    然后简单检查

    SELECT email FROM my_table WHERE my_table.email = some_email
    
        6
  •  0
  •   EoRaptor013    15 年前

    隐马尔可夫模型。。。没有人提到是否存在。我第一个想到的就是:

    IF NOT EXISTS (SELECT * FROM MyTable where MyTable.email = "someemail@somewhere.com

    尽管如此,也许表演和不在没有什么不同。

    希望这有帮助。