当前位置: 首页 > 面试题库 >

加入后选择DISTINCT值

华哲茂
2023-03-14
问题内容

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


问题答案:

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

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


 类似资料:
  • 我有2表连接在一起(订单和Order_item)当我使用连接我得到重复的记录,然后我消除他们与,但当我想得到总和不工作,因为它只是消除了相同的价格值,我所有的价格都是一样的,我得到1不是总和! 如果我不使用,我将按顺序获取每个项目的行 如何正确得到运费总和... 订单表中的数据是 sum=600,但如何获得它,如果我没有区分,我会在每个

  • 问题内容: 几个月前,我和其他人一起用PHP编写了一个简单的应用程序。在那里,我们需要根据一个用户ID和您需要从该用户ID选择的行中获取的另一个值,从多个表中执行SELECT。 我的第一个想法是创建多个SELECT并解析PHP脚本中的所有输出(使用所有mysql_num_rows()和类似的函数进行检查),但是那个家伙告诉我他会这样做。“好的没问题!” 我想,我的写作要少得多。好吧,当我发现他只用

  • 问题内容: 我想在数据库中选择不同的值。让我来看一个简单的例子。 表: 是的,假设我的SQL是。这些是我的结果: 但是,问题在于/ 重复的顺序不同。我不想选择这些,我希望这两列中都有不同的值,请帮忙! 问题答案: 非常邪恶和邪恶:

  • 问题内容: 我很好奇,是否有任何一种方法可以在Django中进行查询,而该查询并非位于下方。我正在尝试执行。 具体来说,我有一个看起来像这样的模型: 其中是内的排名。我希望能够遍历所有类别,对该类别中的每个等级进行一些操作。 我想先获取系统中所有类别的列表,然后查询该类别中的所有产品,然后重复进行直到处理完每个类别。 我宁愿避免使用原始SQL,但是如果我必须去那里,那很好。尽管我以前从未在Djan

  • 我有3个表格:我的Laravel 5项目的产出、产品和服务。 我想基于此条件在一个查询中连接这3个表: 如果(p=产品)获取products.name 如果(s=服务)获取服务。名称

  • 我想在SQL中执行以下操作: 在jOOQ中,我将subQ存储到Select中 我的问题是,如何从subQ中获取maxCol列,并在join中使用它?我的连接是这样的: 我在()上出错 类型字段中的方法eq(字符串)不适用于参数(字段) 我该怎么办?