在搜索记录中检查 mysql table 中不存在的记录

check not existing records in mysql table out of searching records

我正在处理一项 mysql 查询要求。

有一个 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

它非常庞大 table,但我以您为例 table

有时我会得到一个电子邮件列表,以便在详细信息中检查它们是否存在 table。

假设如果我收到像 abc@mail.com、bbb@mail.com 和 zzz@mail.com

这样的电子邮件 ID

我想要检查要求中给出的三封电子邮件中不存在于输出中的电子邮件列表,即 zzz@mail.com !!

检查 table 详细信息中不存在给定要求的电子邮件 ID 的查询是什么(abc@mail.com、bbb@mail.com 和 zzz@mail.com)

提前致谢!!

执行此操作的简单方法是:

SELECT * FROM {yourTable} WHERE eMails="the email address"

或多个:

SELECT * FROM {yourTable} 
WHERE eMails IN ({comma separated and quoted list of email addresses})

如果这个returns零条记录,则邮箱地址不存在。

一个限制:根据您的 DBMS 设置,IN 语句被限制为最大数量的值。请注意不要超出此范围,否则您将收到错误消息或无有效响应。

如果您使用非常长的列表,则将它们插入临时 table 并将 table 与您的基础 table 连接以获得未使用的列表。

在 SQL 结果中获取不存在的事物是棘手的,因为为了出现在结果集中,项目必须存在于某处(作为列中的值,或作为查询中的硬编码值,或作为其中之一的值 derived)。由于您希望获得包含 出现在 table 中的值的结果集,因此您需要执行多个查询。幸运的是,你可以嵌套它们。

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-ed select 来构建 "table" 搜索值。然后我们将 table 连接到 Details table,并仅保留连接 失败 的行(连接的 table 是NULL).

See the SQL Fiddle