mysql使用包含变量的mysql查询创建视图

Posted

技术标签:

【中文标题】mysql使用包含变量的mysql查询创建视图【英文标题】:mysql create view with mysql query that contains variable 【发布时间】:2013-04-29 12:32:08 【问题描述】:

我想使用以下语法来创建 mysql 视图:

create view `ViewName` as (select
              v_starting.callingname,
              v_starting.geofence,
              v_starting.`updatetime`,
              @lastGroup := @lastGroup + if( @lastAddress = v_starting.geofence 
                                         AND @lastVehicle = v_starting.callingname, 0, 1 ) as GroupSeq,
              @lastVehicle := v_starting.callingname as justVarVehicleChange,
              @lastAddress := v_starting.geofence as justVarAddressChange
           from
              v_starting,
              ( select @lastVehicle := '',
                       @lastAddress := '',
                       @lastGroup := 0 ) SQLVars

           order by
              v_starting.`updatetime` )

这失败并出现错误:

#1351 - View's SELECT contains a variable or parameter

我该如何解决这个问题?谢谢一百万。

【问题讨论】:

【参考方案1】:

CREATE VIEW Syntax 中所述:

视图定义受以下限制:

[ <strong><em>deletia</em></strong> ]

SELECT 语句不能引用系统或用户变量。

【讨论】:

【参考方案2】:

认为您需要使用子选择来计算记录数。

类似这样的:-

SELECT v_starting.callingname,
              v_starting.geofence,
              v_starting.`updatetime`,
              Sub1.PrevRecCount ASGroupSeq
FROM v_starting
INNER JOIN (SELECT a.updatetime, COUNT(DISTINCT b.callingname, b.geofence ) AS PrevRecCount
            FROM v_starting a 
            LEFT OUTER JOIN v_starting b
            ON a.updatetime > b.updatetime
            AND a.callingname != b.callingname
            AND a.geofence != b.geofence
            GROUP BY a.updatetime) Sub1

不是 100% 确定这一点,因为我怀疑您目前如何订购商品以获取数量。

【讨论】:

【参考方案3】:

对于变量使用,尝试使用存储过程或自定义函数

【讨论】:

以上是关于mysql使用包含变量的mysql查询创建视图的主要内容,如果未能解决你的问题,请参考以下文章

mysql多表查询并创建视图

MySQL视图

MySQL视图的优缺点以及如何创建视图

MySQL 从查询创建表

mysql中,啥是视图,视图的作用是啥

MySQL数据库高级——视图