MySQL查询以查找部分重复项

时间:2014-04-28 19:35:58

标签: mysql sql duplicates partial

我有一张桌子,我想找一些参加过一场以上比赛的选手。有更多列,但我唯一看到的是first_name,last_name,school和contest。

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

此外,每位参赛者都有一个参赛者_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不同。

1 个答案:

答案 0 :(得分: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