我在 SQL Server 中有这些表:
Flights
(flno:整数,从:字符串,到:字符串,距离:整数出发:时间,到达:时间,价格:真实)Aircraft
(辅助:整数,名称:字符串,巡航范围:整数)Certified
(eid:整数,aid:整数)Employees
(eid:整数,ename:字符串,salary:整数)
请注意,该Employees
关系也描述了飞行员和其他类型的员工;每个飞行员都获得了某些飞机的认证,并且只有飞行员获得了飞行认证。
我想要一个查询,找到一个客户想从麦迪逊到纽约旅行,换班不超过两次。如果客户希望在下午 6 点之前到达纽约,请列出从麦迪逊出发的时间选择。
我想要一个使用嵌套查询的简单答案。
在 Michael Durrant Tip 的帮助下回答:
考虑以下三种情况:
- 直飞。
- 1 站的航班。
- 有两站的航班。
现在开始逐步浏览这些案例。
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’ ))