Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Double JOIN z tym samym stołem dwa razy

Ograniczenia klauzuli WHERE w tabelach lewego łączenia eliminują pożądane wyniki z powodu rekordów o wartości null... Przenieś więc ograniczenia do samego złączenia, aby został on zastosowany PRZED złączeniem, zachowując w ten sposób rekordy o wartości null.

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

Ponieważ pluton nie ma tygodnia/roku (anno), to klauzula WHERE eliminuje ten rekord. przesuwając granice do złączenia, filtr jest stosowany przed wystąpieniem złączenia, zachowując w ten sposób LEWE złącze zewnętrzne.

Innymi słowy, klauzula WHERE powoduje, że lewa łączy się z wewnętrzną!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa NIE PODOBNIE w MySQL

  2. Jaka jest lokalizacja klienta mysql .my.cnf w XAMPP dla Windows?

  3. jak zrobić podział na kolumnie tabeli sql

  4. Przygotowana instrukcja MySQL — jak przejść przez pętlę

  5. MySQL REPLACE :Jak zastąpić wszystkie wystąpienia znaku w każdym odrębnym podciągu rozdzielonym tym samym nagłówkiem i ogonem