sql >> Database >  >> RDS >> Mysql

Dubbele JOIN met dezelfde tafel twee keer

De limieten van de where-clausule in de linker join-tabellen elimineren de gewenste resultaten vanwege null-records... Verplaats de limieten dus naar de join zelf, zodat de limiet wordt toegepast VOORDAT de join wordt uitgevoerd, zodat de records met de null-waarde behouden blijven.

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

Omdat pluto geen week/jaar (anno) heeft, elimineert de waar-clausule dat record. door de limieten naar de join te verplaatsen, wordt het filter toegepast voordat de join plaatsvindt, waardoor de LEFT outer join behouden blijft.

Anders gezegd, de WHERE-clausule zorgt ervoor dat de linker een innerlijke wordt!




  1. Limieten voor Salesforce API Query-cursor

  2. MySQL InnoDB:niet-primaire sleutel automatisch verhogen

  3. PL/SQL-functie in Oracle kan DBMS_AQ niet zien

  4. bewerking niet toegestaan ​​wanneer het object is gesloten bij het uitvoeren van een meer geavanceerde query