SQLite - как вычесть одно значение из другого - PullRequest
1 голос
/ 20 июня 2020

У меня есть база данных с 3 таблицами; tblCustomers, tblBookings, tblFlights.

В таблице заказов у ​​меня есть количество проданных билетов на каждый рейс, а в таблице полетов - вместимость каждого рейса. Я хочу вернуть оставшееся количество билетов на каждый рейс. Я попытался вычесть емкость из билетов, но не могу правильно понять синтаксис, я знаю, что создал JOIN, и он не возвращает правильную информацию.

Я пробовал:

SELECT *, (Capacity - Tickets)
from tblFlights, tblBookings
where (Capacity - Tickets)

Ответы [ 2 ]

3 голосов
/ 20 июня 2020

Фактически вы перекрестно объединяете таблицы, но вы должны выполнить соединение INNER или LEFT на основе связанных столбцов таблиц, которые, как я полагаю, должны иметь такие имена, как flight_id:

select *, (f.Capacity - b.Tickets) tickets_left
from tblFlights f inner join tblBookings b
on b.flight_id = f.flight_id
where (f.Capacity - b.Tickets) > 0

Я сохранил предложение where, потому что вы используете его в своем коде.

Если отношение tblFlights и tblBookings не равно 1:1, вам также потребуется агрегирование:

select f.*, (f.Capacity - coalesce(b.Tickets, 0)) tickets_left
from tblFlights f left join (
  select flight_id, sum(Tickets) Tickets
  from tblBookings
  group by flight_id 
) b on b.flight_id = f.flight_id
1 голос
/ 20 июня 2020

Ваш синтаксис должен быть примерно таким:

SELECT *, (Capacity - Tickets) as Remaining
    from tblFlights Tf, tblBookings Tb 
    where Tb.id = Tf.id and (Capacity - Tickets) > 0

Вы также можете использовать оператор соединения:

SELECT *, (Capacity - Tickets) as Remaining
    from tblFlights Tf
    join tblBookings Tb on (Tf.id = Tb.id)
    where (Capacity - Tickets) > 0

То, что у вас было изначально, создает перестановки между двумя таблицами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...