0

私は次の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。すべての派生テーブルには独自のエイリアスが必要です

誰かが私がここで間違っていることを見ることができますか?ありがとう!

4

1 に答える 1

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;
于 2013-03-21T01:44:11.730 に答える