检查记录中不存在mysql表中的现有记录

时间:2016-08-01 18:50:40

标签: mysql

我正在处理一个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 !!

根据给定的要求(ab​​c@mail.com,bbb @mail.com和zzz@mail.com)检查表格详细信息中不存在哪些电子邮件ID的查询是什么

先谢谢!!

2 个答案:

答案 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)。

See the SQL Fiddle

相关问题