Ошибка одного оператора выбора "Каждая производная таблица должна иметь свой собственный псевдоним"

Я пытался заставить работать следующее утверждение select уже несколько дней, но мне не повезло. Краткая сводка кода состоит в том, что он возвращает список всех команд в базе данных и сколько побед каждая команда имеет против команд, занявших первые 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 ответ

Вероятно, вы пропустите, чтобы добавить псевдоним из-за выравнивания вашего 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;
Другие вопросы по тегам