【问题标题】:Finding MySQL near-duplicates across two columns using wildcards使用通配符在两列中查找 MySQL 近似重复项
【发布时间】:2018-07-11 19:55:29
【问题描述】:

我有一个包含 id、first_name 和 last_name 列的表。我想获取 last_name 和 first_name 的第一个字符重复的行列表。我正在摸索,感觉里面有一个 COUNT('WHERE') ,但不能完全理解。

本质上,我正在寻找可能的重复项。所以,从这个子集中:

+------+-----------+-----------+-------------+------------+
| id   | firstName | lastName  | dateOfBirth | createdOn  |
+------+-----------+-----------+-------------+------------+
|  143 | Susie     | Wong      | 2015-12-01  | 2016-07-11 |
| 1268 | Dale      | Armstrong | 2017-01-01  | 2017-01-04 |
| 1435 | Olive     | Armstrong | 1941-03-11  | 2017-03-08 |
| 2013 | Timotini  | Attilio   | 1932-01-01  | 2017-08-21 |
| 2014 | Olinda    | Attilio   | 1938-01-01  | 2017-08-21 |
| 3076 | Sue       | Armstrong | 1951-06-01  | 2018-06-22 |
| 3079 | Susan     | Armstrong | 1951-09-15  | 2018-06-22 |
+------+-----------+-----------+-------------+------------+

我想要一个仅返回 3076 和 3079(Sue 和 Susan Armstrong)的查询,该查询基于查找匹配的姓氏和匹配的首字母缩写,如下所示:

+------+-----------+-----------+-------------+------------+
| id   | firstName | lastName  | dateOfBirth | createdOn  |
+------+-----------+-----------+-------------+------------+
| 3076 | Sue       | Armstrong | 1951-06-01  | 2018-06-22 |
| 3079 | Susan     | Armstrong | 1951-09-15  | 2018-06-22 |
+------+-----------+-----------+-------------+------------+

【问题讨论】:

  • 样本数据和预期结果会有所帮助。也许您正在寻找left()...
  • 按建议更新,谢谢!

标签: mysql


【解决方案1】:

这是使用existsleft 的一个选项:

select *
from yourtable y
where exists (
  select 1
  from yourtable y2 
  where y.id != y2.id 
    and y.lastname = y2.lastname 
    and left(y.firstname,1) = left(y2.firstname,1)
)

【讨论】:

  • 完美!我必须在查询中添加“ORDER BY y.lastname”才能使其正常工作,否则这正是我需要的。非常感谢,现在我对 left() 有了一个很好的了解!
【解决方案2】:

last_name 的重复项

SELECT id, first_name, last_name, COUNT(*) c 
FROM table 
GROUP BY last_name 
HAVING c > 1;

要按first_name 中的第一个字符进行分组,请尝试使用left() 函数

【讨论】:

  • 我试过了,但是 GROUP BY 不起作用,因为我需要查看所有姓氏匹配的人(以及名字的首字母也匹配)的单独记录。此查询返回多个出现的姓氏并附有其他名字的计数。
猜你喜欢
  • 2021-08-31
  • 2014-02-12
  • 2018-12-12
  • 1970-01-01
  • 2020-01-11
  • 2013-07-11
  • 1970-01-01
  • 2016-01-08
  • 2016-03-02
相关资源
最近更新 更多