小编典典

加入后选择DISTINCT值

sql

我有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 = 1date_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获得唯一性?


阅读 220

收藏
2021-04-22

共1个答案

小编典典

您需要在联接中包括对人员ID的限制,并使用外部联接。即使您要加入的表中没有记录,也要使用外部联接来返回信息。尝试

SELECT person_id, vehicles.* 
FROM vehicles 
LEFT OUTER JOIN Owners on vehicles.vehicle_id = owners.vehicle_id 
and person_id = 1
2021-04-22