2013-03-21 30 views
0

我一直试图让下面的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), 
          (SELECT @current_rankings := 0, @last_ranking := 0) r 
       GROUP BY team ORDER BY formula DESC) prequery; 

,但我不断收到以下错误

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

谁能明白我在这里做错了。谢谢!

回答

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; 
+1

+1。非常好的捕获(并且在提出修复时明确指出问题出在哪里)。 – 2013-03-21 02:01:12

+1

谢谢,我在寻找问题时专注于工会中的两个选择陈述。正确的缩进帮助:) – Jeremy 2013-03-21 14:42:30

+0

不客气':D' – 2013-03-21 14:42:56

相关问题