Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL renvoie la première ligne d'une table jointe

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.