Versucht, andere SO-Benutzer Fragen/Antworten auf meine Frage, aber konnte nicht 'zurückentwickeln'. JOINS entziehen sich mir immer noch.MYSQL LINKER JOIN 3 Tabellen enthalten Nullsätze
Ich habe drei Tabellen: Rennen (eine Liste aller Rennen), Ergebnis (Ergebnisse für jedes Rennen), Fahrer (Fahrerinformationen). Nicht alle Fahrer sind in allen Rennen auf einer bestimmten Strecke gefahren.
Rennen Tisch
| race_id | track_id | year | complete |
+-----------+------------+--------+----------+
| 1 | 1 | 2006 | 1 |
| ... | ... | ... | ... |
| 21 | 1 | 2007 | 1 |
| ... | ... | ... | ... |
| 135 | 1 | 2008 | 1 |
| ... | ... | ... | ... |
| 215 | 1 | 2009 | 1 |
| ... | ... | ... | ... |
| 292 | 1 | 2010 | 1 |
| ... | ... | ... |... |
| 351 | 1 | 2011 | 0 |
+-----------+------------+--------+----------+
Ergebnistabelle
| race_id | driver_id | finish |
+---------+-----------+--------+
| 135 | 1 | 15 |
| ... | ... | ... |
| 292 | 1 | 6 |
+---------+-----------+--------+
Treibertabelle
| driver_id | name |
+-----------+------------+
| 1 | Joe Driver |
+-----------+------------+
ich eine Ergebnismenge wollen, das zeigt:
| name | race_id | year | finish |
+------------+---------+--------+--------+
| Joe Driver | 21 | 2007 | NULL |
| Joe Driver | 135 | 2008 | 15 |
| Joe Driver | 215 | 2009 | NULL |
| Joe Driver | 292 | 2010 | 6 |
+------------+---------+--------+--------+
Joe Fahrer fuhr nur in 2 der 4 Rennen, die nach 2006 bei track_id = 1, waren und enthält nur Rennen, die abgeschlossen sind (1)
Dies ist meine aktuelle Abfrage:
SELECT driver.driver, race.id, race.year, result.finish
FROM race
LEFT JOIN result ON race.id = result.race_id
LEFT JOIN driver ON result.driver_id = driver.driver_id
WHERE race.track_id = 1
AND race.year > 2006
AND race.complete = 1
AND driver.driver_id = 1
ORDER BY race.id ASC
Das Ergebnis ich bekomme nur die Rennen zeigt der Fahrer war in:
| name | race_id | year | finish |
+------------+---------+--------+--------+
| Joe Driver | 135 | 2008 | 15 |
| Joe Driver | 292 | 2010 | 6 |
+------------+---------+--------+--------+
ich bin sicher, ich bin mit Blick auf eine einfache Regel zu JOINS?
Danke!
Quassnoi: Danke! Das macht den Trick genau. Sieht aus wie CROSS JOIN ist der Schlüssel. Ich möchte eine intelligente Frage stellen, wie der CROSS JOIN und der nachfolgende LEFT JOIN alle anderen Treiber aus der Abfrage herausfiltern lassen ... aber ich kann nicht. Vorschläge für die beste Ressource, um mehr über JOINS zu erfahren? – darrenfauth
@darrenfauth: Lesen Sie die Dokumentation für die Starter und meine Website, http://explainextended.com, für weitere Themen :) – Quassnoi
Und es ist 'driver.driver_id = 1' in der' WHERE'-Klausel, die die anderen Treiber ausfiltert, nicht die Joins. Entfernen Sie 'driver.driver_id = 1' und Sie werden alle Treiber sehen. – Quassnoi