我有一个包含以下字段的表:
battle_id, winner, looser
1 200 44
2 55 366
3 44 200
4 123 200
5 200 44
6 55 366
7 177 205
8 188 211
9 366 55
10 55 366
现在它有大约1300个记录(它的小),大约有400个玩家,每次战斗中只能有一个胜利者和一个更宽松的(没有抽奖)
我怎样才能找到所有重复的战斗?我不想找到一个玩家的所有重复战斗,我想知道所有玩家的所有重复战斗......我知道我在php中制作一个递归函数,迭代所有战斗并分配它们到一个矩阵,但只是为了好玩......有没有办法只在mysql上做?
我如何优化表格以更快地找到重复的战斗?
问候
编辑:
例如,我希望查询显示:
battle_id, winner, looser
1 200 44
2 55 366
3 44 200
5 200 44
6 55 366
9 366 55
10 55 366
答案 0 :(得分:2)
这应该有效,使用自联接可能会导致许多重复的条目
<强> SQLFIDDLE 强>
SELECT
t1.battle_id,
t1.winner,
t1.loser
FROM
your_table t1
WHERE
EXISTS (
SELECT
1
FROM
your_table t2
WHERE
( ( t1.winner = t2.winner
AND t1.loser = t2.loser )
OR ( t1.loser = t2.winner
AND t1.winner = t2.loser ) )
AND t1.battle_id <> t2.battle_id
)
答案 1 :(得分:1)
试试这个:
SELECT b1.battle_id,
b1.winner,
b1.looser
FROM battles as b1
group by b1.battle_id, b1.winner, b1.looser
having count(*)>=2