首页 > 解决方案 > “每个派生表都必须有自己的别名” Mysql 错误

问题描述

我的查询有什么问题:

SELECT minDate, deviceType, COUNT(*)
FROM (SELECT visitorId, deviceType, 
               MIN(sessionDate) as minDate
      FROM sessions
      GROUP BY visitorId)
WHERE minDate > DATE_SUB(NOW(), INTERVAL 14 DAY)
GROUP BY minDate, deviceId

我收到了这条消息:

查询错误:错误:ER_DERIVED_MUST_HAVE_ALIAS:每个派生表都必须有自己的别名

标签: mysqlsqldatabasesubquery

解决方案


错误信息很清楚。您必须为子选择生成的派生表设置别名。所以,给它一个别名。

另一个问题是,在子查询中,非聚合列deviceType应该包含在GROUP BY子句中。此更改可能会也可能不会产生您所期望的结果:如果没有,那么您需要提供示例数据、预期结果以及您要完成的工作的说明,以便帮助修复查询。

SELECT minDate, deviceType, COUNT(*)
FROM (
    SELECT visitorId, deviceType, MIN(sessionDate) as minDate
      FROM sessions
      GROUP BY visitorId, deviceType -- all non-aggregated columns in the GROUP BY clause
) t  -- alias here
WHERE minDate > DATE_SUB(NOW(), INTERVAL 14 DAY)
GROUP BY minDate, deviceId

推荐阅读