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

Instruction Select imbriquée dans la jointure MYSQL

Je fais ce type de requête différemment, avec une jointure d'exclusion au lieu d'une sous-requête. Vous voulez trouver les lignes de B qui ont le temps maximum pour un ID donné ; en d'autres termes, où aucune autre ligne n'a une heure supérieure et le même ID.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL

Vous pouvez également utiliser une table dérivée , qui devrait être plus performant que l'utilisation d'une sous-requête corrélée.

SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
  ON (B.ID, B.Time) = (B2.ID, B2.Time)

P.S. :J'ai ajouté le greatest-n-per-group étiquette. Ce type de question SQL apparaît chaque semaine sur Stack Overflow, vous pouvez donc suivre cette balise pour voir des dizaines de questions similaires et leurs réponses.