SQL 创建查询帮助.这就是我所拥有的,我没有得到正确的输出



>问题:查找至少三辆SUV的主要所有者的所有人的姓名和地址(没有重复项)。

我的回答:

SELECT DISTINCT name, addr, type
  FROM owner x, owner y, owner z, people p, vehicle_type
 WHERE x.owner_id = y.owner_id AND x.owner_id = z.owner_id AND type='SUV';

这个答案没有给我正确的输出。 以下是我使用的表格:

people( sin, name, height,weight,eyecolor, haircolor,addr,gender,birthday )
owner(owner_id, vehicle_id, is_primary_owner)
vehicle_type( type_id, type )

其中type_id是一个数字,类型是SUV/SEDAN/卡车或你能想到的任何其他类型的汽车。

我正在使用SQLplus

您可以使用连接和聚合来解决此查询:

select p.name, p.addr
from owner o join
     people p
     on p.owner_id = p.people_id join
     vehicle v
     on o.vehicle_id = v.vehicle_id and v.type = 'SUV' and o.is_primary_owner = 1
group by p.name, p.addr
having count(*) >= 3;

一些评论。

  1. 学习正确的联接语法。 它使查询更易于阅读。
  2. 使用表
  3. 别名时,请为表使用缩写,以便您可以知道列的来源(即,在查询中,o1o2o3x、y , and z' 更明智)。
  4. 您不需要select列表中的type,因为您专门寻找 SUV。 如果你想要它,就像'SUV' as type
  5. .
  6. 我不知道people加入表格的真正领域是什么。 我猜是people_id. 可能是sin.
  7. 我猜is_primary_owner的假/真值为 0/1。 如果值不同,请根据它进行设置。

选择不同的名称,从车主X添加,车辆类型t,其中is_primary_owner=真,类型='SUV';

这可能仅适用于拥有几乎一辆 SUV 的人。

最新更新