EDIT: UPDATED Is it possible to subtract the results from query 1 with query 2, in one query?
SELECT
FlightID, COUNT(*) AS 'Available Seats'
FROM
AircraftSeating
INNER JOIN
Flight ON Flight.FlightAircraftID = AircraftSeating.AircraftID
WHERE
FlightID = 10;
SELECT
PassFlightID, COUNT(*) AS 'Seats Taken'
FROM
`AircraftSeating`
LEFT JOIN
Passenger ON Passenger.PassAircraftSeat = AircraftSeating.AircraftSeatID
WHERE
PassFlightID =10;
Something like this:
SELECT COUNT(*) AS [AllSeats]
,SUM(IF(Passenger.PassAircraftSeat IS NULL, 0, 1)) AS [Taken Seats]
,COUNT(*) - SUM(IF(Passenger.PassAircraftSeat IS NULL, 0, 1)) AS [Free Seats]
FROM Flight
INNER JOIN AircraftSeating
ON Flight.FlightAircraftID = AircraftSeating.AircraftID
LEFT JOIN Passenger
ON Flight.FlightID = Passenger.PassFlightID
AND AircraftSeating.AircraftSeatID = Passenger.PassAircraftSeat
WHERE Flight.FlightID = 10;
I am pretty sure you can express this in a single query. I think the result is something like this:
SELECT f.FlightID, COUNT(*) as NumSeats,
COUNT(p.PassAircraftSeat) as NumSeatsTaken,
(COUNT(*) - COUNT(p.PassAircraftSeat)) as NumSeatsAvailable
FROM Flight f JOIN
AircraftSeating acs
ON f.FlightAircraftID = acs.AircraftID LEFT JOIN
Passenger p
ON p.PassAircraftSeat = acs.AircraftSeatID
WHERE f.FlightID = 10;
Your data model is not clear. Flights are generally repeated on different days, and may even have different aircraft. It seems like a date of some sort is needed for the query.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.