我有一张桌子,我想找一些参加过一场以上比赛的选手。有更多列,但我唯一看到的是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不同。
答案 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