【问题标题】:Table doesn't exist in nested query with aggregations表在具有聚合的嵌套查询中不存在
【发布时间】:2014-11-07 15:05:10
【问题描述】:

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

选择相对总数
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(Rel.total) FROM Rel)

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

【问题讨论】:

    标签: mysql-error-1146


    【解决方案1】:

    似乎最后一个子选择无法引用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 2017-12-15
      • 1970-01-01
      • 2013-12-06
      • 1970-01-01
      相关资源
      最近更新 更多