【问题标题】:MySQL query to find partial duplicatesMySQL查询以查找部分重复项
【发布时间】:2014-04-28 19:35:57
【问题描述】:

我有一张桌子,我想在其中找出写过不止一场比赛的参赛者。还有更多列,但我查看的唯一列是名字、姓氏、学校和比赛。

我想在我的桌子上找到写过不止一个比赛的人,所以基本上相同的名字,相同的姓氏,相同的学校,但不同的比赛。有 3 种可能的比赛。

另外,每个参赛者都有一个competitant_id,它是主键。

编辑

我应该指定比赛必须等于我指定的 3 场比赛中的 1 场。该表可能有来自我没有查看的其他比赛的参赛者,即使列出重复项也是有益的。因此,如果它找到 2 个符合条件的人,就会同时显示这两个人。

编辑 2

一些示例数据……

| id | first_name | last_name | school | contest |  
| 01 |   Jane     |    Doe    |  2568  |   1001  |  
| 02 |   Mike     |    Doe    |  2568  |   1003  |  
| 03 |   Jane     |    Doe    |  2568  |   1003  |  
| 04 |   Jane     |    Doe    |  2523  |   1001  |  

在此示例中,id 01 和 03 会匹配,但其他人不会匹配,因为名称与 02 不同,而学校与 04 不同。

【问题讨论】:

  • 2个人怎么可能重复?显示一些数据。
  • 对不起,我应该添加一些示例数据。我进行了编辑。

标签: mysql sql duplicates partial


【解决方案1】:
SELECT  first_name,last_name,school,contest FROM table 
WHERE contest IN ('blah','mah','wah')
GROUP BY  first_name, last_name, school 
HAVING COUNT(DISTINCT contest)>1

编辑

SELECT * FROM table t JOIN
(SELECT  GROUP_CONCAT(id)as ids,first_name,last_name,school,contest FROM table
WHERE contest IN (1001,1002,1003)
GROUP BY  first_name, last_name, school 
HAVING COUNT(DISTINCT contest)>1)x
ON FIND_IN_SET(t.id,x.ids)>0

FIDDLE

【讨论】:

  • 对不起,我忘了说我必须指定 3 场比赛。我在上面的编辑中添加了它……实际上我想我可以添加一个 WHERE 子句来指定 3 场比赛。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多