0

我在 SQL Server 中有这些表:

  • Flights(flno:整数,从:字符串,到:字符串,距离:整数出发:时间,到达:时间,价格:真实)

  • Aircraft(辅助:整数,名称:字符串,巡航范围:整数)

  • Certified(eid:整数,aid:整数)

  • Employees(eid:整数,ename:字符串,salary:整数)

请注意,该Employees关系也描述了飞行员和其他类型的员工;每个飞行员都获得了某些飞机的认证,并且只有飞行员获得了飞行认证。

我想要一个查询,找到一个客户想从麦迪逊到纽约旅行,换班不超过两次。如果客户希望在下午 6 点之前到达纽约,请列出从麦迪逊出发的时间选择。

我想要一个使用嵌套查询的简单答案。


在 Michael Durrant Tip 的帮助下回答:

考虑以下三种情况:

  1. 直飞。
  2. 1 站的航班。
  3. 有两站的航班。

现在开始逐步浏览这些案例。

1.寻找开始和停止的航班,你知道在哪里,你知道什么时候,对吧?

对于 2. 想想那两次飞行。他们将在哪里开始和结束,这两次飞行的共同点是什么。每个航班的时间标准是什么?

对于 3. 考虑这 3 个部分和每个部分的特征,包括依赖关系

如果要显示所有选择,那么您最终希望将所有这些结合起来:

SELECT F.departs
FROM Flights F
WHERE F.flno IN (( SELECT F0.flno
FROM Flights F0
WHERE F0.from = ‘Madison’ AND F0.to = ‘New York’
AND F0.arrives < ‘18:00’ )
UNION
( SELECT F0.flno
FROM Flights F0, Flights F1
WHERE F0.from = ‘Madison’ AND F0.to <> ‘New York’
AND F0.to = F1.from AND F1.to = ‘New York’
AND F1.departs > F0.arrives
AND F1.arrives < ‘18:00’ )
UNION
( SELECT F0.flno
FROM Flights F0, Flights F1, Flights F2
WHERE F0.from = ‘Madison’
AND F0.to = F1.from
AND F1.to = F2.from
AND F2.to = ‘New York’
AND F0.to <> ‘New York’
AND F1.to <> ‘New York’
AND F1.departs > F0.arrives
AND F2.departs > F1.arrives
AND F2.arrives < ‘18:00’ ))
4

0 回答 0