MySQL:计算列

Mat*_*att 3 mysql sql database

我刚刚开始使用SQL并遇到了问题.

在我的数据库中,我目前有两个表,电影院和剧院.我正在尝试在Cinemas表中创建一个"#The theatre#",用Cinema图表中的Cinema ID(外键)计算Theatres表中的Theatres数量.我让它作为一个SQL查询:

SELECT cinemas.CinemaID,Town,COUNT(*) AS '# of Theatres'
FROM cinemax.cinemas,cinemax.theatres
WHERE cinemas.CinemaID=theatres.CinemaID
GROUP BY cinemas.CinemaID;
Run Code Online (Sandbox Code Playgroud)

但是想知道是否可以在Cinemas表中创建一个列,它自动执行上述查询并将值插入每一行.

它将是一个非常小的数据库,因此速度不是真正的问题,我只想学习如何制作这样的计算列(如果可能的话).

And*_*mar 11

计算列通常表示您可以计算每行的值.MySQL不支持,但SQL Server支持.例如,要永久存储两列的总和:

create table Table1 (a int, b int, c as a+b persisted)
Run Code Online (Sandbox Code Playgroud)

但是,您希望存储聚合,即一组行的值.MySQL和SQL Server不支持使用聚合的物化视图,但Oracle会:

create table Table1 (a int, b int);

create materialized view View1 as
select  a
,       count(*) as Cnt
from    Table1
group by
    a;
Run Code Online (Sandbox Code Playgroud)

但是,使用MySQL,你可以做的最接近的是一个定期填充表的cronjob:

truncate table Table1Summary;
insert Table1Summary (a, Cnt) select a, count(*) from Table1;
Run Code Online (Sandbox Code Playgroud)

您可以像物化视图一样查询表格; 它会一样快,但不能保证是最新的.