У меня есть 3 таблицы:
Vehicle: vehicle_id, vehicle_type
1, motorcycle
2, car
3, van
Owners: person_id, vehicle_id, date_bought
1, 1, 2009
1, 2, 2008
2, 3, 2009
2, 1, 2005
Я хочу отобразить список всех названий транспортных средств. Если person_id = 1
, date_bought
также должны быть возвращены.
Вот я и подумал, что начну с этого:
SELECT * FROM vehicles
LEFT JOIN Owners USING (vehicle_id)
который возвращает это:
1, 1, motorcycle, 2009
1, 2, car, 2008
2, 3, van, 2009
2, 1, motorcycle, 2005
Однако сейчас я не могу сузить это до нужного результата. Если я использую DISTINCT(car_id)
, ничего не изменится, так как я уже выбираю разные идентификаторы автомобилей до JOIN; они неразличимы только после соединения. Если я использую WHERE person_id = 1
, я удаляю последние 2 строки, и все ссылки на фургон исчезают. Если я использую GROUP BY car_id
, первая и последняя строки объединяются, но date_bought
для мотоцикла выбирается произвольно. Я хочу вот что:
1, 1, motorcycle, 2009
1, 2, car, 2008
, 3, van,
Мне нужен отдельный идентификатор автомобиля, но это происходит до JOIN и поэтому не имеет никакого эффекта. Как я могу получить уникальность с помощью JOIN?