sql >> Databáze >  >> RDS >> Mysql

Double JOIN se stejným stolem dvakrát

Limity klauzule where v tabulkách levého spojení eliminují požadované výsledky kvůli nulovým záznamům... Takže přesuňte limity na samotné spojení, aby byl limit aplikován PŘED spojením, čímž se zachovají záznamy o hodnotách 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

Protože pluto nemá týden/rok (anno), pak klauzule where tento záznam odstraňuje. posunutím limitů na spojení se filtr použije dříve, než ke spojení dojde, čímž se zachová LEVÉ vnější spojení.

Jinak řečeno, klauzule WHERE dělá levou spojku vnitřní!




  1. Rails:Chyba při instalaci pg gem

  2. Technické srovnání:Microsoft Access 2016 vs SQL Server 2016

  3. Plánování kapacity pro MySQL a MariaDB – dimenzování velikosti úložiště

  4. Příkazy MySQL:Cheat Sheet of Common MySQL Queries