sql >> Databasteknik >  >> RDS >> Mysql

Double JOIN med samma bord två gånger

Where-klausulens gränser i de vänstra join-tabellerna eliminerar de önskade resultaten på grund av nollposter... Så flytta gränserna till själva joinen så att gränsen tillämpas INNAN joinen, och behåller således nollvärdesposterna.

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

Eftersom pluto inte har någon vecka/år (anno) så eliminerar where-satsen den posten. genom att flytta gränserna till sammanfogningen, appliceras filtret innan sammanfogningen inträffar, vilket behåller den VÄNSTER yttre sammanfogningen.

Med andra ord, WHERE-satsen gör att vänstern går med i en inre!




  1. Fel (felkod:1175) under exekvering av uppdateringskommando på tabell med MySQL Workbench 5.2

  2. designdatabas relaterad till tidsattribut

  3. Importera CSV till MySQL

  4. Returnera parametrarna för en lagrad procedur eller användardefinierad funktion i SQL Server (T-SQL-exempel)