Rup*_*ott 4 mysql sql join group-by distinct
我有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
Run Code Online (Sandbox Code Playgroud)
我想显示所有车辆名称的列表.如果person_id = 1,date_bought也应该退还.
所以我想我会从这开始:
SELECT * FROM vehicles
LEFT JOIN Owners USING (vehicle_id)
Run Code Online (Sandbox Code Playgroud)
返回这个:
1, 1, motorcycle, 2009
1, 2, car, 2008
2, 3, van, 2009
2, 1, motorcycle, 2005
Run Code Online (Sandbox Code Playgroud)
但是,我现在无法将其缩小到所需的结果.如果我使用DISTINCT(car_id),没有变化,因为我已经在JOIN之前选择了不同的车载ID; 加入后它们只是非独特的.如果我使用WHERE person_id = 1,我删除最后2行,所有对货车的引用都消失了.如果我使用GROUP BY car_id,第一行和最后一行合并,但date_bought摩托车的任意选择.我想要的是这个:
1, 1, motorcycle, 2009
1, 2, car, 2008
, 3, van,
Run Code Online (Sandbox Code Playgroud)
我需要一个不同的汽车ID,但这发生在JOIN之前,所以根本没有效果.如何通过JOIN获得唯一性?
您需要在联接中包含对人员ID的限制,并使用外部联接.即使您要加入的表中没有记录,也希望返回信息时使用外部联接.尝试
SELECT person_id, vehicles.*
FROM vehicles
LEFT OUTER JOIN Owners on vehicles.vehicle_id = owners.vehicle_id
and person_id = 1
Run Code Online (Sandbox Code Playgroud)