具有聚合的嵌套查询中不存在表

时间:2014-11-07 15:05:11

标签: mysql-error-1146

我的数据库名称是test,我有一个名为HaveGoal的表。 我在问这个:

SELECT Rel.total
FROM(SELECT H.number,H.teamname,SUM(H.numberofgoals)AS总
来自HaveGoal H GROUP BY H.number,H.teamname)AS Rel
WHERE Rel.total =(SELECT MAX(Rel.total)FROM Rel)

它给出:ERROR 1146(42S02):表' test.Rel'不存在

1 个答案:

答案 0 :(得分:0)

似乎最后一个subselect不能引用FROM子句中定义的嵌套查询。

在这种情况下,您有多种解决方案:

  • 复制第二个子选择内部(并希望性能不会太差)
  • 定义视图以使嵌套查询随处可用
  • 当您正在寻找最大值时,您可以对数据进行排序并仅采用第一行
  • 如果您不在MySQL上,可以使用WITH声明

复制适用于任何情况:

SELECT Rel.total
FROM (
    SELECT H.number, H.teamname, SUM(H.numberofgoals) AS total
    FROM HaveGoal H 
    GROUP BY H.number,H.teamname
) AS Rel
WHERE Rel.total = (
    SELECT MAX(Rel2.total) 
    FROM (
        SELECT H.number, H.teamname, SUM(H.numberofgoals) AS total
        FROM HaveGoal H 
        GROUP BY H.number,H.teamname
    ) AS Rel2
)

排序后的第一行要短得多,但隐含MAX

SELECT Rel.total
FROM (
    SELECT H.number, H.teamname, SUM(H.numberofgoals) AS total
    FROM HaveGoalTest H 
    GROUP BY H.number,H.teamname
) AS Rel
ORDER BY total DESC
LIMIT 1