У меня есть 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?