SELECT c.*, d.*
FROM country c
INNER JOIN ducks d
ON d.id = --- guessing the ducks Primary Key here
( SELECT dd.id --- and here
FROM ducks dd
WHERE c.id = dd.country_id
ORDER BY dd.rating DESC
LIMIT 1
)
Un index sur (country_id, rating, id)
pour la table MyISAM ou (country_id, rating)
pour la table InnoDB, cela aiderait.
Cette requête n'affichera qu'un seul duck
par pays, même avec plus d'un ayant la même note. Si vous voulez que les canards avec un classement ex aequo apparaissent, utilisez le GROUP BY
de @imm réponse.