Что вам нужно сделать, так это присоединиться к своему столу в одной команде, но с разными игроками, когда они найдены, вы должны сгруппировать таблицу результатов и сосчитать
Поскольку я предполагаю , есть ещечем 2 игрока в каждой команде и вы ищете разных игроков в одном и том же году , как подразумевается (не указано) в вашем вопросе, я позволил себе добавить его вУсловия соединения. Конечно, вы можете удалить его
SELECT
p1,
p2,
COUNT(team_id) as total
FROM
(
SELECT
h1.team_id,
h1.player_id as p1,
h2.player_id as p2
FROM
player_history h1
INNER JOIN player_history h2 ON h1.team_id = h2.team_id AND h1.player_id != h2.player_id AND h1.year = h2.year
GROUP BY
h1.team_id,
h1.player_id
) sameteam
GROUP BY
p1,
p2
HAVING
total >= 3
Обратите внимание, что ваш пример не соответствует данным примера.play 4 не должно быть в списке
SQLFiddle здесь надеюсь, это поможет