如何让 MySQL table 列具有计算值

How to have a MySQL table column with a calculated value

我的问题用一个例子最容易解释...

我有以下两个 tables - 飞机和座位:

planes
 plane_ID     LONGINT - Index
 model        CHAR(20)
 seat_count   INT - Calculated (Count of rows in seats where plane_ID matches)
 filled_seats INT - Calculated (Count of rows in seats where plane_ID matches and reserved = True)

seats
 plane_ID  LONGINT
 reserved  bool

我想做的是,当我查询平面 table 时,我想获得 "seats" 列和 "filled_seats" 列的计算值。

我只想说 "SELECT seat_count FROM planes WHERE model='Boeing 787'" 来找出波音 787 的座位 table 中有多少条记录。我期望的是返回单行,单列包含波音 787 的座位数。

这可以通过更复杂的 select 语句来完成,但我想改用计算列。

我知道可以这样做,但我不知道怎么做,也不知道它叫什么,所以我很难在网上找到任何信息。

我在 Linux

上使用 MySQL v 8.0.19

您要找的是 Generated columns,但您不能用它们做您想做的事情,因为表达式只能包含 "Literals, deterministic built-in functions, and operators",特别是:"Subqueries are not permitted."。

你可以通过 VIEW:

实现你想要的
CREATE VIEW plane_seats AS
SELECT p.plane_ID, p.model, 
       COUNT(s.reserved) AS seat_count,
       SUM(s.reserved) AS filled_seats
FROM planes p
JOIN seats s ON s.plane_ID = p.plane_ID
GROUP BY p.plane_ID, p.model

然后您可以在 VIEW:

上使用您的查询
SELECT seat_count 
FROM plane_seats
WHERE model = 'Boeing 787'