I have a table structure like this Table Structure
Here I want to select all the data from bus_routines table with bus details and avaliable_seat which is calculated from buses.number_of_seat - reserved_seats.number_of_reserved_seat - booking.number_of_seat even  if the data is not present in booking table and reserved_seats  table too  where the bus_routines.sector_from=Ktm ,bus_routines.sector_to=Pkr and bus_routines.date=2015-12-15 
Relation between them are :
buses and bus_routines --> one to many
bus_routines and booking --> one to many
bus_routines and reserved_seats --> one to many
I have tried the following query
SELECT r.* , b.* ,
    (
    SELECT b.number_of_seat - sum(booking.number_of_seat)-sum(reserved_seats.number_of_reserved_seat) 
    FROM bus_routines AS r 
    INNER JOIN buses AS b 
        ON b.id = r.bus_id 
    INNER JOIN 
        (SELECT number_of_seat , bus_routine_id FROM booking GROUP BY  booking.bus_routine_id) AS booking 
        ON booking.bus_routine_id = r.id 
    INNER JOIN (SELECT number_of_reserved_seat , routine_id FROM reserved_seats GROUP BY reserved_seats.routine_id) AS reserved_seats 
    ON r.id = reserved_seats.routine_id
    WHERE 
    r.sector_from = "KTM" AND 
    r.sector_to = "PKR" AND 
    r.departure_date = "2015-12-15" 
    ) AS avaliable_seat 
FROM bus_routines AS r 
INNER JOIN buses AS b 
    ON b.id = r.bus_id 
WHERE 
    r.sector_from = "KTM" AND 
    r.sector_to = "PKR" AND 
    r.departure_date = "2015-12-15" 
HAVING avaliable_seat > 0 
I get the result what I want but the avaliable_seat is same for all the row 
I have tried another query too but it give me the single result
SELECT r.* , b.* , b.number_of_seat - sum(booking.number_of_seat)-sum(reserved_seats.number_of_reserved_seat) AS available_seat
FROM bus_routines AS r 
INNER JOIN buses AS b 
    ON b.id = r.bus_id 
INNER JOIN 
    (SELECT number_of_seat , bus_routine_id FROM booking GROUP BY booking.bus_routine_id) AS booking 
    ON booking.bus_routine_id = r.id 
INNER JOIN 
    (SELECT number_of_reserved_seat , routine_id FROM reserved_seats GROUP BY reserved_seats.routine_id) AS reserved_seats 
    ON r.id = reserved_seats.routine_id
WHERE   
    r.sector_from = "KTM" AND 
    r.sector_to = "PKR" AND 
    r.departure_date = "2015-12-15" 
HAVING available_seat > 0
I also tried another query and it give me Subquery returns more than 1 row . The query is
SELECT r.* , b.* ,
b.number_of_seat - (SELECT sum(number_of_seat) FROM booking GROUP BY  booking.bus_routine_id)
 - (SELECT sum(number_of_reserved_seat) FROM reserved_seats GROUP BY reserved_seats.routine_id) AS available_seat
FROM bus_routines AS r 
INNER JOIN buses AS b 
    ON b.id = r.bus_id 
WHERE 
    r.sector_from = "KTM" AND 
    r.sector_to = "PKR" AND 
    r.departure_date = "2015-12-15" 
HAVING available_seat > 0
 
     
     
    