为什么在MySQL中每个有效的SELECT都不是有效的VIEW?

时间:2011-03-24 23:24:39

标签: mysql sql view

我希望得到一个按天分组的计数。以下SELECT工作正常:

  SELECT COUNT( time_end ), 
         time_end
    FROM main
GROUP BY DAY( time_end )

我将其复制/粘贴到phpmyadmin的VIEW创建表单中,并收到此错误:

  

“#1064 - 您的SQL语法出错;请查看与您的MySQL服务器版本对应的手册,以便在'count(time_end)附近使用正确的语法.AS SELECT count(time_end),time_end来自主要的GROUP BY d'第4行“

这是从phpmyadmin的表单生成的完整SQL:

CREATE ALGORITHM = UNDEFINED VIEW `count by day` (
  time_end,
  count( time_end )
) AS SELECT COUNT( time_end ), 
            time_end
       FROM main
   GROUP BY DAY( time_end ) 

怎么了?为什么有效的SELECT不能自动创建有效的VIEW?感谢。

2 个答案:

答案 0 :(得分:4)

不知道phpMyAdmin在哪里获得该语法。使用:

CREATE VIEW COUNT_BY_DAY AS
  SELECT COUNT( time_end ), 
         time_end
    FROM main
GROUP BY DAY( time_end )

请注意,您依赖于MySQL's hidden column functionality - time_end值将是任意的(不能依赖于始终返回与要选择的值的数量相同的值)。它也不能移植到大多数数据库,你必须重新编写它。

此外,如果您不按月限制,那么您的计数将在28至31天之间出现偏差。并非所有月份都有31天。

答案 1 :(得分:2)

您的查询唯一的问题是您的列名没有反向标记。

  

创建算法=未定义的视图count by day
    `count(time_end)`#你需要把它放在反引号中     TIME_END,
  )AS SELECT COUNT(time_end),
              TIME_END
         从主要      GROUP BY DAY(time_end)

对于它的价值,你的列名称是错误的。

您使用的语法是视图列名称的EXPLICIT NAMING。它允许您为列提供名称,否则将从查询列中派生,例如。

CREATE VIEW X AS
SELECT time_end, other1
FROM main

:: X contains the columns `time_end` and `other1`

CREATE VIEW X ( TheStopTime, DataPoint ) AS
SELECT time_end, other1
FROM main

:: X contains the columns `TheStopTime` and `DataPoint`