0

我有一个包含以下字段的表:

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
4

2 回答 2

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
    )
于 2013-11-06T04:52:23.960 回答
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
于 2013-11-06T04:57:17.740 回答