无法在MySQL上创建VIew

时间:2016-06-03 00:56:02

标签: mysql sql view

可以在MySQL上创建此VIEW吗?问题在于变量。我无法找到解决方法。

CREATE VIEW vw_ranking AS 

SELECT rank.ativid_id, rank.user_id, b.nome, rank.quant

FROM
(SELECT user_id, ativid_id, quant, 

    @ativ_rank := IF(@current_ativ = ativid_id, @ativ_rank + 1, 1) AS ativ_rank,
    @current_ativ := ativid_id 

FROM (SELECT ativid_id, user_id, COUNT(user_id) as quant FROM tb_registro_ativ

    GROUP BY ativid_id, user_id) atividade
    ORDER BY ativid_id, quant DESC

) rank INNER JOIN tb_usuarios b ON rank.user_id = b.user_id

WHERE ativ_rank <= 10;

2 个答案:

答案 0 :(得分:1)

您无法使用视图创建来定义变量。

来源:https://dev.mysql.com/doc/refman/5.5/en/create-view.html

  

视图定义受以下限制:

     

SELECT语句不能在FROM子句中包含子查询。

     

SELECT语句 不能 引用 系统变量 用户定义   变量

     

在存储的程序中,SELECT语句不能引用程序   参数或局部变量。

     

SELECT语句不能引用预处理语句参数。

     

定义中引用的任何表或视图都必须存在。之后   视图已经创建,有可能删除一个表或视图   定义是指。在这种情况下,使用视图会导致   错误。要检查此类问题的视图定义,请使用   CHECK TABLE语句。

我建议你改用存储过程。

答案 1 :(得分:1)

MySQL中的视图受到严重限制。您不能使用变量,也不能在FROM子句中使用子查询。

您的查询非常复杂。你可以使用SELECT中的子查询,这通常可以计算排名 - 至少在小表上。在您的情况下,您可能需要一系列视图来完成您想要的任务。