我有一个大列表的电子邮件地址,我需要确定哪些不已经在我的数据库中。我可以构建一个能告诉我这些信息的查询吗?
我正在使用 SQL Server 2000 ,如果它需要非标准扩展
答案 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没有什么不同。
希望这有帮助。