Eu tenho uma mesa (jogadores) contendo uma lista de jogadores, gostaria de emparelhar esses jogadores de uma maneira única, para que o oponente de cada jogador seja único a cada rodada (ou seja, toda vez que a consulta SELECT for chamada).
A player_opponent_log
coluna integer[]
contém os player_id
s dos jogadores que jogaram com aquele jogador em uma rodada anterior (e é usada para ajudar a escolher jogadores únicos). Esta coluna é preenchida posteriormente usando os resultados da consulta SELECT - e está fora do escopo desta questão.
A tabela por exemplo teria os seguintes dados;
player_id | player_opponent_log
-----------+---------------------
1 | {2,3}
2 | {1}
3 | {1}
4 | {}
5 | {}
6 | {}
7 | {8}
8 | {7}
O que estou tentando alcançar seria algo ao longo das seguintes linhas:
player_id1 | player_id2
------------+------------
1 | 4
2 | 3
5 | 7
6 | 8
Eu tentei inúmeras abordagens diferentes, incluindo GROUP BY
, DISTINCT ON ()
, self JOINS, mas não consegui chegar a uma solução funcional.
O seguinte resultado é o que estou obtendo atualmente e estou tentando evitar:
player_id1 | player_id2
------------+------------
1 | 4
2 | 3
3 | 4
4 | 1
5 | 1
6 | 1
7 | 1
8 | 1
Onde estou ficando preso é como eliminar um único jogador sendo alocado para uma rodada mais de uma vez por consulta SELECT.
Qualquer ideia sobre como resolver isso seria muito apreciada.