>问题:查找至少三辆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;
一些评论。
- 学习正确的联接语法。 它使查询更易于阅读。 使用表
- 别名时,请为表使用缩写,以便您可以知道列的来源(即,在查询中,
o1
、o2
和o3
比x
、y, and
z' 更明智)。 - 您不需要
select
列表中的type
,因为您专门寻找 SUV。 如果你想要它,就像'SUV' as type
. - 我不知道
people
加入表格的真正领域是什么。 我猜是people_id
. 可能是sin
. - 我猜
is_primary_owner
的假/真值为 0/1。 如果值不同,请根据它进行设置。
选择不同的名称,从车主X添加,车辆类型t,其中is_primary_owner=真,类型='SUV';
这可能仅适用于拥有几乎一辆 SUV 的人。