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

Double JOIN avec la même table deux fois

Les limites de la clause where sur les tables de jointure de gauche éliminent les résultats souhaités en raison des enregistrements nuls... Déplacez donc les limites vers la jointure elle-même afin que la limite soit appliquée AVANT la jointure, conservant ainsi les enregistrements de valeur nulle.

SELECT i.*,r.*,r2.*, r.points+r2.points AS sum_points
FROM list_couples AS l
LEFT JOIN rank AS r ON l.p_1=r.player
  and r.week='$week' AND r.anno='$anno' 
LEFT JOIN rank AS r2 ON l.p_2=r2.player
  and  r2.week='$week' AND r2.anno='$year'
ORDER BY sum_points DESC

Parce que Pluton n'a pas de semaine/année (anno), la clause where élimine cet enregistrement. en déplaçant les limites vers la jointure, le filtre est appliqué avant que la jointure ne se produise, conservant ainsi la jointure externe LEFT.

En d'autres termes, la clause WHERE fait en sorte que la gauche se joint à une interne !