SQL:如何过滤GROUP BY之外的结果

时间:2017-04-05 18:29:00

标签: mysql sql

原始问题

  

以下关系会跟踪航空公司的航班信息:

     

飞机 aircraft_number ,aircraft_make,cruisingrange)

     

认证 pilot_id aircraft_number

     

Pilot pilot_id ,pilot_name,薪水)

     

请注意, italic 属性表示主键。在该计划中,每个飞行员都获得了某些飞机的认证以SQL格式编写以下每个查询。

     
    

(ii)查找能够操作范围超过2,000英里但未获得任何波音飞机认证的飞机的飞行员姓名。

  

有人可以帮我理解如何为此编写查询吗?

我的猜测是首先join PILOTCERTIFIED,然后是joinAIRCRAFT,然后是GROUP BY PILOT.pilot_id,但除此之外,我不知道如何过滤pilot_id以排除那些没有至少一架飞机的飞行距离最小为2000并且没有飞机aircraft_make'波音'?

非常感谢!

1 个答案:

答案 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