首页 > 解决方案 > SQLite - 如何从另一个值中减去一个值

问题描述

我有一个包含 3 个表的数据库;tblCustomers、tblBookings、tblFlights。

在 Bookings 表中,我有每个航班的售票数量,在 Flight 表中,我有每个航班的容量。我想退回每个航班的剩余票数。我尝试从票证中减去容量,但语法不正确,我知道我创建了一个 JOIN 并且它没有返回正确的信息。

我努力了:

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

标签: databasesqlite

解决方案


您实际上是在交叉连接表,但您应该根据表的相关列执行INNER或连接,我相信这些列必须具有如下名称:LEFTflight_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子句,因为您在代码中使用了它。

如果tblFlightsand的关系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

推荐阅读