group_concat in separate columns
Probably you do not want group_concat() at all, you want a join:

SELECT t1.name AS p1, t2.name AS p2
FROM
    players AS t1
INNER JOIN
    matches m1 ON t1.id = m1.player_id
INNER JOIN
    matches m2 ON m1.pair_id = m2.pair_id and m1.id &lt; m2.id
INNER JOIN
    players t2 ON t2.id = m2.player_id


The m1.id &lt; m2.id part ensures that each pair will be returned only once, with p1 being the one with smaller id in the matches table for a given pair_id.