【问题标题】:MYSQL distinct column row pair queryMYSQL 不同列行对查询
【发布时间】:2021-04-08 02:24:20
【问题描述】:

想象一个联系人表,其中同一个联系人有多个条目,但数据不同。如何选择这些数据进行审查?不幸的是,由于可能存在视觉上可识别的错误数据,目前无法自动处理,因此各种类型的合并将是令人不快的。

FName         LName           Email           Phone
Heywood       Yapinchme                       555-555-555
Heywood       Yapinchme       hy@moes.com               
Seymour       Butz            sb@moes.com   
Seymour       Butz                            555-555-556
Seymour       Butz            
Hughe         Jass            hj@moes.com     555-555-557
Amanda        Hugginkiss      ah@moes.com

我想只查看前两列的重复项,其中存在多个条目。即

FName         LName           Email           Phone
Heywood       Yapinchme                       555-555-555
Heywood       Yapinchme       hy@moes.com               
Seymour       Butz            sb@moes.com   
Seymour       Butz                            555-555-556
Seymour       Butz            

审核的下一步是在蓝色以太中。目前有超过一百万行,Bart 一直很忙。但是功能强大的服务器,这不是常规操作,而是处理数据迁移的一次性操作,因此可能会有点伤痕累累。

我对@9​​87654323@ 和GROUP BY 进行了一些尝试,但似乎每个联系人都会返回。

【问题讨论】:

  • 我正在使用 php、mysql 或 mariadb。欢迎任何解决方案。

标签: php mysql mariadb


【解决方案1】:

您可以使用聚合来识别重复项:

SELECT FName, LName
FROM tablename
GROUP BY FName, LName
HAVING COUNT(*) > 1

如果你想要所有重复的行:

SELECT *
FROM tablename
WHERE (FName, LName) IN (
  SELECT FName, LName
  FROM tablename
  GROUP BY FName, LName
  HAVING COUNT(*) > 1
)

如果你的 MySql/MariaDB 版本支持窗口函数:

SELECT t.*
FROM (
  SELECT *, COUNT(*) OVER (PARTITION BY FName, LName) counter
  FROM tablename
) t
WHERE t.counter > 1

【讨论】:

  • 完美,非常感谢。对你的帮助是一个小小的祝福,也许可以照亮你的生活;愿鲜花永远在你的路上,阳光照亮你的一天。愿鸣鸟一路为您伴奏。愿彩虹在你身边奔跑,天空永远是蓝色的。愿幸福充满你一生的每一天。
猜你喜欢
  • 2015-06-23
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 1970-01-01
  • 2020-12-17
  • 2013-08-27
相关资源
最近更新 更多