Mysql
 sql >> Database >  >> RDS >> Mysql

Double JOIN con lo stesso tavolo due volte

I limiti della clausola where sulle tabelle di join di sinistra stanno eliminando i risultati desiderati a causa di record nulli... Quindi sposta i limiti sul join stesso in modo che il limite venga applicato PRIMA del join, mantenendo così i record di valore nullo.

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

Poiché Plutone non ha settimana/anno (anno), la clausola where sta eliminando quel record. spostando i limiti al join, il filtro viene applicato prima che avvenga il join, mantenendo così il join esterno SINISTRO.

In altre parole, la clausola WHERE sta facendo unire la sinistra a una interna!