以下关系会跟踪航空公司的航班信息:
飞机( aircraft_number ,aircraft_make,cruisingrange)
认证( pilot_id , aircraft_number )
Pilot ( pilot_id ,pilot_name,薪水)
请注意, italic 属性表示主键。在该计划中,每个飞行员都获得了某些飞机的认证以SQL格式编写以下每个查询。
(ii)查找能够操作范围超过2,000英里但未获得任何波音飞机认证的飞机的飞行员姓名。
有人可以帮我理解如何为此编写查询吗?
我的猜测是首先join PILOT
到CERTIFIED
,然后是join
到AIRCRAFT
,然后是GROUP BY PILOT.pilot_id
,但除此之外,我不知道如何过滤pilot_id
以排除那些没有至少一架飞机的飞行距离最小为2000并且没有飞机aircraft_make
'波音'?
非常感谢!
答案 0 :(得分:3)
这应该做:
select p.pilot_name
from pilot p
join certified c
on p.pilot_id = c.pilot_id
join aircraft a
on c.aircraft_number = a.aircraft_number
where a.cruisingrange > 2000
and p.pilot_id not in (
select c.pilot_id
from certified c
join aircraft a
on c.aircraft_number = a.aircraft_number
where a.aircraft_make = 'BOEING'
)
group by p.pilot_id