【发布时间】:2010-12-28 23:56:33
【问题描述】:
我有 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 之前选择了不同的汽车 ID;它们仅在加入后不明显。如果我使用WHERE person_id = 1,我会删除最后两行,所有对货车的引用都消失了。如果我使用GROUP BY car_id,第一行和最后一行是合并的,但是摩托车的date_bought 是任意选择的。我想要的是这样的:
1, 1, motorcycle, 2009
1, 2, car, 2008
, 3, van,
我需要一个不同的汽车 ID,但这发生在 JOIN 之前,因此根本没有效果。如何通过 JOIN 获得唯一性?
【问题讨论】:
标签: sql mysql join group-by distinct