我正在处理一个mysql查询要求。
HAved one table详细信息,包含以下详细信息
Id Emails
1 abc@mail.com
2 bbb@mail.com
3 ccc@mail.com
4 ddd@mail.com
5 eee@mail.com
6 fff@mail.com
7 ggg@mail.com
8 hhh@mail.com
9 iii@mail.com
10 jjj@mail.com
它是一张非常庞大的桌子,但我将你作为示例表显示
有时我会在详细信息表中查看电子邮件列表以检查它们是否存在。
如果我收到电子邮件ID,请发送电子邮件至abc@mail.com,bbb @mail.com和zzz@mail.com
我想要在输出中输出的三封电子邮件中不存在的电子邮件列表,即要求检查,即zzz@mail.com !!
根据给定的要求(abc@mail.com,bbb @mail.com和zzz@mail.com)检查表格详细信息中不存在哪些电子邮件ID的查询是什么
先谢谢!!
答案 0 :(得分:1)
这样做的简单方法是:
SELECT * FROM {yourTable} WHERE eMails="the email address"
或多人:
SELECT * FROM {yourTable}
WHERE eMails IN ({comma separated and quoted list of email addresses})
如果返回零记录,则电子邮件地址不存在。
一个限制:根据您的DBMS设置,IN
语句限制为最大值。小心你不要超过其他你会得到错误或没有有效的回应。
如果使用非常长的列表,则将它们插入临时表中,并将该表与基表连接以获取未使用的列表。
答案 1 :(得分:0)
在SQL结果中获取不存在的东西是棘手的,因为为了出现在结果集中,项必须存在于某个地方(作为列中的值,或作为硬编码值)查询,或作为其中一个派生的值)。由于您希望获得包含不在表中出现的值的结果集,因此您需要执行多个查询。幸运的是,你可以嵌套它们。
select addr, Emails from
(select 'abc@mail.com' as addr
union select 'bbb@mail.com' as addr
union select 'zzz@mail.com' as addr) as fd
left outer join Details on Details.Emails = fd.addr
having Emails IS NULL
我们做了一堆union
- 编辑select
来构建搜索值的“表格”。然后,我们将该表连接到Details
表,并仅保留连接失败的行(连接表为NULL
)。