我有四张桌子:SCHED_FLIGHT,AIRCRAFT,PLANETYPE和RESERVATIONS。我想做这样的事情:
select S.SCHED_NO as "Scheduled Flight Number", P.CAPACITY - COUNT (SELECT * FROM RESERVATIONS R WHERE R.SCHED_NO = S.SCHED_NO) "Remaining Seats"
from PLANETYPE P, AIRCRAFT A, SCHED_FLIGHT S
where S.SERIAL_NO = A.SERIAL_NO and A.TYPE_NO = P.TYPE_NO;
如您所见,每个SCHEDULED_FLIGHT都有一个AIRCRAFT SERIAL_NO,每个AIRCRAFT都有一个PLANETYPE TYPE_NO,每个PLANETYPE都有不同的容量,因此,每个SCHED_FLIGHT都有一个基于飞机的容量,我想得到剩余座位的数量计算对该航班的预订次数。
当然代码不起作用,但我不知道如何解决这个问题。有什么提示吗?
编辑:我收到了一些答案,但首先我只是以两个表为例 - 但实际上涉及4个表,我必须包含一个where子句或多个连接...所以我还是困惑。我现在应该怎么做?看看我的代码。答案 0 :(得分:3)
更新: 我不确定所有列是否与您的真实列相对应,但此查询可能如下所示:
SELECT
SF.SCHED_NO AS 'Scheduled Flight Number',
SF.CAPACITY - COUNT (R.SCHED_NO) AS 'Remaining Seats'
FROM
(
SELECT
SF.SCHED_NO,
P.CAPACITY
FROM SCHEDULED_FLIGHT SF
INNER JOIN AIRCRAFT A
ON SF.AIRCRAFT_SERIAL_NO = A.SERIAL_NO
INNER JOIN PLANETYPE P
ON A.PLANETYPE_NO = P.PLANETYPE_NO
) SF
LEFT JOIN RESERVATIONS R
ON SF.SCHED_NO = R.SCHED_NO
GROUP BY SF.SCHED_NO, SF.CAPACITY
答案 1 :(得分:2)
我倾向于将此视为与join
的聚合。首先,按航班号汇总预订。然后将其加入FLIGHT
并计算剩余容量:
SELECT F.FLIGHT_NO, (F.CAPACITY - COALESCE(cnt, 0)) as Remaining
FROM FLIGHT F LEFT JOIN
(SELECT R.FLIGHT_NO, COUNT(*) as cnt
FROM RESERVATIONS R
GROUP BY R.FLIGHT_NO
) R
ON R.FLIGHT_NO = F.FLIGHT_NO;