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

时间:2009-06-26 22:25:01

标签: sql sql-server

我有一个大列表的电子邮件地址,我需要确定哪些已经在我的数据库中。我可以构建一个能告诉我这些信息的查询吗?

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

6 个答案:

答案 0 :(得分:5)

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

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

数据转换

如果您的数据位于名为 emails.txt 的文本文件中(每行一行),则可以使用以下DOS命令创建插入语句:

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

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

答案 1 :(得分:4)

创建一个临时表,将e-mailaddresses加载到临时表中,然后执行NOT IN查询,例如

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

您可以使用INSERT INTO扩展它

答案 2 :(得分:2)

为什么不将电子邮件地址作为表导入,只是针对您已有的表格进行检查?

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

答案 3 :(得分:1)

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

做这样的事情:

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

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

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

答案 4 :(得分:0)

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

CREATE INDEX email_index ON my_table(email)

然后只需检查

SELECT email FROM my_table WHERE my_table.email = some_email

答案 5 :(得分:0)

嗯......没人提到IF EXISTS。这本来是我的第一个想法:

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

虽然,也许表现与NOT IN没有什么不同。

希望这有帮助。