Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Double JOIN mit der gleichen Tabelle zweimal

Die Limits der Where-Klausel in den linken Join-Tabellen eliminieren die gewünschten Ergebnisse aufgrund von Null-Datensätzen ... Verschieben Sie also die Limits auf den Join selbst, damit das Limit VOR dem Join angewendet wird, wodurch die Null-Wert-Datensätze beibehalten werden.

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

Da Pluto keine Woche/Jahr (Anno) hat, eliminiert die Where-Klausel diesen Datensatz. Durch Verschieben der Grenzen zum Join wird der Filter angewendet, bevor der Join auftritt, wodurch der linke äußere Join beibehalten wird.

Anders ausgedrückt, die WHERE-Klausel bewirkt, dass die linke mit einer inneren verknüpft wird!