首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字段的一部分与MySQL中字段的另一部分进行比较?

如何将字段的一部分与MySQL中字段的另一部分进行比较?
EN

Stack Overflow用户
提问于 2016-05-17 13:51:17
回答 2查看 17关注 0票数 0

这是试图在我的系统中识别一个潜在的重复用户,他将在其中创建两个条目: my.name.totoro@shibly.com和my.name.totoro@shibly.net

如何找到所有的匹配,其中唯一的区别是域名的最后一部分?

EN

回答 2

Stack Overflow用户

发布于 2016-05-17 13:59:49

这并不是很有效率,但它做到了以下工作:

代码语言:javascript
复制
SELECT *
FROM mytable 
WHERE LEFT(email, LENGTH(email) - LOCATE('.', REVERSE(email))) IN 
(
   SELECT LEFT(email, LENGTH(email) - LOCATE('.', REVERSE(email))) AS common
   FROM mytable
   GROUP BY LEFT(email, LENGTH(email) - LOCATE('.', REVERSE(email)))
   HAVING COUNT(*) > 1
)

Demo here

票数 0
EN

Stack Overflow用户

发布于 2016-05-17 14:25:25

http://sqlfiddle.com/#!9/2a6fa/2

代码语言:javascript
复制
SELECT 
  u.email,
  GROUP_CONCAT(c.email) clones
FROM users u
INNER JOIN users c
ON u.id <> c.id
  AND  SUBSTRING(u.email,1,LENGTH(u.email)-LENGTH(SUBSTRING_INDEX(u.email,'.',-1))) 
       = SUBSTRING(c.email,1,LENGTH(c.email)-LENGTH(SUBSTRING_INDEX(c.email,'.',-1))) 
GROUP BY u.id

此查询返回太多的记录,如.com = .net.net = .com

代码语言:javascript
复制
rec1 = my.name.totoro@shibly.com    my.name.totoro@shibly.net
rec2 = my.name.totoro@shibly.net    my.name.totoro@shibly.com

但可以通过添加以下内容来解决:

代码语言:javascript
复制
WHERE u.email = "my.name.totoro@shibly.com"

这将返回所有副本,为特定的电子邮件时,需要。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37278125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档