You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL中查找无任何邮箱记录的客户?

问题描述

数据表中line与account的组合唯一标识一个客户(name为员工信息,无关),需要找出所有没有任何邮箱记录的客户(即该line+account组合下所有行的email都为空),预期结果是4-1000和7-1000。

数据表

lineaccountnameemail
11000Reyes VonRueden Sr.
11000Dr. Elena Bartell V
11000Lucio Wehnersharon51@yahooo.com
21000April Hansen
21000Amy Waelchihegmann.khalid@yahooo.com
21000Tremaine Cassin
31000Susana White Jr.
31000Roxane Hoegerjfay@hotmailses.com
31000Prof. Eric Boehm
41000Miles Considine
41000Araceli Effertz
41000Prof. Adolph Pacocha
51000Prof. Rafaela Hillssydney20@gradyesses.com
51000Delta Becker
51000Aditya Ratkejulian28@yahooes.com
61000Miss Elaina Aufderhar Sr.royal.predovic@connellyses.com
61000Miss Stephanie Russel IV
61000Dr. Ramiro Marks IVwrice@yahooes.com
71000Garfield Kozey
71000Gene Hilpert
解决方案

以下三种MySQL实现方式均可直接得到目标结果:

方法1:分组+HAVING过滤(最直观)

按line和account分组,筛选出分组内无有效邮箱的客户组合:

SELECT line, account
FROM your_table_name
GROUP BY line, account
HAVING COUNT(TRIM(email)) = 0;
  • 说明:TRIM(email)用于排除仅含空格的无效值,COUNT()会忽略NULL和空字符串,计数为0则表示该客户下无任何有效邮箱记录。

方法2:子查询排除有邮箱的客户

先获取所有存在有效邮箱的客户组合,再从全量客户中排除这些:

SELECT DISTINCT line, account
FROM your_table_name
WHERE (line, account) NOT IN (
    SELECT DISTINCT line, account
    FROM your_table_name
    WHERE TRIM(email) != '' AND email IS NOT NULL
);
  • 说明:子查询定位有至少一个有效邮箱的客户,外层用NOT IN过滤,剩余结果即为无邮箱记录的客户。

方法3:左连接+空值过滤

通过左连接匹配有邮箱的客户,筛选未匹配到的记录:

SELECT DISTINCT t1.line, t1.account
FROM your_table_name t1
LEFT JOIN (
    SELECT DISTINCT line, account
    FROM your_table_name
    WHERE TRIM(email) != '' AND email IS NOT NULL
) t2 ON t1.line = t2.line AND t1.account = t2.account
WHERE t2.line IS NULL;
  • 说明:左连接后,t2.line IS NULL的记录即为原表中无对应有效邮箱的客户组合。

内容的提问来源于stack exchange,提问作者nzoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:51:21