Si la requête proposée n'a pas donné le résultat attendu, alors il peut donc y avoir plus d'un espace entre les doublons?
C'est qu'elle base de données? Avec Oracle je crois qu'on peut écrire
SELECT * FROM ma_table WHERE REGEXP_LIKE(prenom, '[:<:]([^[:blank:]]+).+\1', 'i')
REGEXP de mySQL ne supporte pas les références arrières, mais avec php l'on pourrait écrire pour UTF-8
$query = mysqli_query($db, 'SELECT id,prenom FROM ma_table');
while($data=$query->fetch_row()) $rows[$data[0]] = $data[1];
mysqli_free_result($query);
$rows = preg_grep('/(\b\S++).+?\1/iu', $rows);
var_dump($rows);
Pour latin il faut changer l'expression régulière
$rows = preg_grep('/(*UCP)(\b\S++).+?\1/i', $rows);
Peut être que SUBSTRING_INDEX de mySQL pourrait aider à construire un LIKE
SELECT * FROM ma_table WHERE prenom LIKE REPEAT(CONCAT(SUBSTRING_INDEX(prenom,' ',1),'%'),2)
Mais si le premier caractère est souvent un espace il trouvera pas grand chose de pertinent. Même sur les 3 premiers espaces
SELECT * FROM ma_table
WHERE prenom LIKE REPEAT(CONCAT(SUBSTRING_INDEX(prenom,' ',1),'%'), 2)
OR prenom LIKE REPEAT(CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(prenom,' ',2),' ',-1),'%'),2)
OR prenom LIKE REPEAT(CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(prenom,' ',3),' ',-1),'%'),2)
Et il faut espérer que les blancs comme \t \n \r ne sont pas de la partie, car seul une expression régulière pour gérer le "tout et n importe quoi" à partir de là.
Bonne chance