如何让 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'
我的问题用一个例子最容易解释...
我有以下两个 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'