如何查找因大小写敏感导致存在重复邮箱的ID记录
查询目标
定位数据表中所有同一ID下,仅因邮箱大小写敏感问题产生重复的ID及关联邮箱记录,排除两类无效重复:
- 邮箱内容完全一致的重复(如ID=102的两条记录)
- 邮箱本身地址完全不同的记录(如ID=103的两条记录)
测试表存量数据
ID Email 101 example@gmail.com 101 EXAMPLE@gmail.com 102 email@gmail.com 102 email@gmail.com 103 la@gmail.com 103 sf@yahoo.com
预期输出
ID Email 101 example@gmail.com 101 EXAMPLE@gmail.com
实现方案
核心判断逻辑:
对同一个ID下的所有邮箱,同时满足两个条件即为目标数据:
- 所有邮箱统一转为小写(或大写)后去重计数为1,证明本质是同一个邮箱地址
- 原始格式的邮箱去重计数大于1,证明存在大小写格式差异
可直接运行的SQL代码
逻辑适配MySQL、PostgreSQL、SQL Server、Oracle等主流数据库,仅需确认大小写转换函数兼容性即可:
SELECT t.ID, t.Email FROM 你的表名 t JOIN ( SELECT ID FROM 你的表名 GROUP BY ID HAVING COUNT(DISTINCT LOWER(Email)) = 1 AND COUNT(DISTINCT Email) > 1 ) res ON t.ID = res.ID
如果你的数据库默认排序规则是大小写不敏感的,可以把COUNT(DISTINCT Email)替换为对应数据库的二进制校验写法(比如MySQL用COUNT(DISTINCT BINARY Email)),强制按原始字节校验大小写差异,避免统计失效。
内容的提问来源于stack exchange,提问作者EZ72
相关产品推荐
相关产品推荐

