首页 > 解决方案 > SQL 创建视图

问题描述

我有一个这样的查询:

CREATE VIEW dashboard
AS 
SET @prevValuepo := 0; 
SET @prevValuefc := 0;
SELECT *,po-@prevValuepo AS selisihpo ,@prevValuepo:= po,forecast-@prevValuefc AS selisihfc ,@prevValuefc:= forecast
FROM view_t_dasboard WHERE tahun= '2020' ORDER BY bulan ASC

但是为什么不能创建表视图

错误:#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 4 行的 'SET @prevValuepo :=0, @prevValuefc :=0, po-@prevValuepo AS selisihpo ,@prevValu' 附近使用正确的语法

标签: mysqlphpmyadmin

解决方案


您不能在语句中包含这些SET语句CREATE VIEW。此外,由于子句中表达式的求值顺序select未定义,您的查询甚至可能不会始终如一地执行您想要的操作。

如果您运行的是 MySQL 8.0,我会推荐窗口函数而不是用户定义的变量。我认为你想要的逻辑是:

create view dashboard as
select
    t.*,
    po - lag(po, 1, 0) over(order by bulan) as selisihpo,
    forecast - lag(forecast, 1, 0) over(order by bulan) as selisihfc
from view_t_dasboard t
where tahun= '2020' 

推荐阅读