Пытался «перепроектировать» других пользователей SO вопросы / ответы на мой вопрос, но не смог.СОЕДИНЕНИЯ все еще ускользают от меня.
У меня есть три таблицы: гонка (список всех гонок), результат (результаты для каждой гонки), гонщик (информация о гонщике).Не все гонщики участвовали во всех гонках на определенной трассе.
таблица гонок
| 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 |
+-----------+------------+--------+----------+
таблица результатов
| race_id | driver_id | finish |
+---------+-----------+--------+
| 135 | 1 | 15 |
| ... | ... | ... |
| 292 | 1 | 6 |
+---------+-----------+--------+
таблица пилотов
| driver_id | name |
+-----------+------------+
| 1 | Joe Driver |
+-----------+------------+
Мне нужен набор результатов, который показывает:
| 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 |
+------------+---------+--------+--------+
Драйвер Джо участвовал в гонках только в 2 из 4 гонок, которые имели трек с идентификатором track_id = 1, после 2006 года и включает в себя только завершенные гонки (1)
Это мой текущий запрос:
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
Результат, который я получаю, показывает только гонки, в которых был водитель:
| name | race_id | year | finish |
+------------+---------+--------+--------+
| Joe Driver | 135 | 2008 | 15 |
| Joe Driver | 292 | 2010 | 6 |
+------------+---------+--------+--------+
Я уверен, что пропускаюпростое правило для JOINS?
Спасибо!