2013-04-05 102 views
1

我有以下語句,它會產生此錯誤。很明顯,select語句的第一行中的別名「R」沒有聲明,但它在語句的最後。有人有主意嗎?MySQL存儲過程在選擇語句中說未定義別名

#1327 - 未聲明的變量,R

CREATE PROCEDURE `get_series_completion`(IN team1_id INT, IN team2_id INT, IN round_shortname VARCHAR(5)) 
BEGIN 
    DECLARE num_games_total, num_games_played INT; 

    SELECT COUNT(*) INTO num_games_played, R.games_per_series INTO num_games_total 
    FROM (
     SELECT game_id 
     FROM team_games 
     WHERE team_id IN (team1_id, team2_id) 
     GROUP BY game_id 
      HAVING COUNT(*) = 2 
      AND SUM(standing = 0) = 0 
    ) AS S, rounds AS R ON R.round_shortname = round_shortname; 

    SELECT num_games_played/num_games_total; 
END$$ 

回答

1

你應該選擇所有列前進入條款,您的查詢應該是:

SELECT COUNT(*), R.games_per_series INTO num_games_played, num_games_total 
    FROM (
     SELECT game_id 
     FROM team_games 
     WHERE team_id IN (team1_id, team2_id) 
     GROUP BY game_id 
      HAVING COUNT(*) = 2 
      AND SUM(standing = 0) = 0 
    ) AS S 
    LEFT OUTER JOIN rounds AS R ON R.round_shortname = round_shortname; 

SELECT COUNT(*), R.games_per_series INTO num_games_played, num_games_total 
    FROM (
     SELECT game_id 
     FROM team_games 
     WHERE team_id IN (team1_id, team2_id) 
     GROUP BY game_id 
      HAVING COUNT(*) = 2 
      AND SUM(standing = 0) = 0 
    ) AS S, rounds AS R 
    WHERE R.round_shortname(+) = round_shortname; -- implicit left outer join 
+0

哦,我會試試這個。我將「LEFT JOIN」切換到「,」,並忘記改變它。 – lwansbrough 2013-04-05 04:41:14

+0

對於您發佈的所有變體,仍然會收到相同的未聲明錯誤。 – lwansbrough 2013-04-05 04:46:17

+0

@iLoch,檢查更新的答案 – 2013-04-05 04:49:02