Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Double JOIN com a mesma tabela duas vezes


Os limites da cláusula where nas tabelas de junção à esquerda estão eliminando os resultados desejados devido aos registros nulos... Portanto, mova os limites para a própria junção para que o limite seja aplicado ANTES da junção, mantendo assim os registros de valor nulo.
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

Como plutão não tem semana/ano (anno), então a cláusula where está eliminando esse registro. movendo os limites para a junção, o filtro é aplicado antes que a junção ocorra, mantendo assim a junção externa ESQUERDA.

Dito de outra forma, a cláusula WHERE está fazendo com que a esquerda se junte a uma interna!