单选语句错误“每个派生表必须有自己的别名”

时间:2013-03-21 01:41:41

标签: mysql sql mysql-error-1248

我一直试图让以下选择声明工作几天,但没有运气。代码的快速摘要是它返回数据库中所有团队的列表以及每个团队对排名前10的团队的胜利数量。从包含已经玩过的每个游戏的游戏表中获取胜利。这是我的代码

SELECT     IF(@last_ranking <> formula, @current_rankings := @current_rankings + 1, @current_rankings)  AS rank, 
            @last_ranking := formula, 
            prequery.team, 
            prequery.formula
FROM        (select @current_rankings := 0) sqlvars, 
            (SELECT    team, 
                        SUM(score) formula 
            FROM (SELECT     g.home_team, 
                            SUM(CASE WHEN t.team_id IS NULL THEN 0 ELSE g.home_wins END) AS formula 
            FROM            games g LEFT JOIN 
                        _top_10 AS t ON g.away_team = t.team_id 
            WHERE       
                        g.season = 2012 AND 
                        g.completed = 1 
        UNION ALL SELECT     g.away_team, 
                        SUM(CASE WHEN t2.team_id IS NULL THEN 0 ELSE g.away_wins END) AS formula 
            FROM        games g LEFT JOIN 
                        _top_10 AS t2 ON g.home_team = t2.team_id 
            WHERE      
                        g.season = 2012 AND 
                        g.completed = 1), 
                            (SELECT @current_rankings := 0, @last_ranking := 0) r 
                GROUP BY team ORDER BY formula DESC ) prequery;

但我一直收到以下错误

  

错误代码:1248。每个派生表必须有自己的别名

任何人都能看到我在这里做错了什么。谢谢!

1 个答案:

答案 0 :(得分:2)

可能因为SELECT语句的对齐而错过了添加别名。

SELECT  IF(@last_ranking <> formula, @current_rankings := @current_rankings + 1, @current_rankings)  AS rank, 
        @last_ranking := formula, 
        prequery.team, 
        prequery.formula
FROM    (select @current_rankings := 0) sqlvars, 
        (
            SELECT  team, 
                    SUM(score) formula 
            FROM    (
                        SELECT  g.home_team, 
                                SUM(CASE WHEN t.team_id IS NULL THEN 0 ELSE g.home_wins END) AS formula 
                        FROM    games g LEFT JOIN 
                                _top_10 AS t ON g.away_team = t.team_id 
                        WHERE   g.season = 2012 AND 
                                g.completed = 1 
                        UNION ALL 
                        SELECT      g.away_team, 
                                    SUM(CASE WHEN t2.team_id IS NULL THEN 0 ELSE g.away_wins END) AS formula 
                        FROM        games g LEFT JOIN 
                                    _top_10 AS t2 ON g.home_team = t2.team_id 
                        WHERE      
                                    g.season = 2012 AND 
                                    g.completed = 1
                    ) AS AliasHere,  -- <<=== HERE
                    (SELECT @current_rankings := 0, @last_ranking := 0) r 
                GROUP BY team ORDER BY formula DESC 
        ) prequery;