MySQL 存储过程说别名在 select 语句中未定义

标签 mysql select stored-procedures alias

我有以下语句,它产生了这个错误。显然,select 语句第一行中的别名“R”没有声明,但它就在语句的末尾。有人有什么想法吗?

#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$$

最佳答案

您应该在 into 子句之前选择所有列,您的查询应该是:

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

关于MySQL 存储过程说别名在 select 语句中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15825986/

相关文章:

mysql - find_in_set 与 or 有什么区别(索引选择?速度?)

sql - 如果 Oracle 中的总行数超过 10,如何从表中获取行?

mysql - SQL - 获取带有条件的每个不同值的计数?

mysql - 如何发现MySQL存储过程的问题?

sql - 我可以在 mysql 4.0.27 中使用 contains 函数吗?

mysql - 通过 App Engine 使用 Cloud SQL 时如何选择要查询的数据库?

MySQL值(value)的唯一性

MySQL如何制作FULL OUTER

.net - VB.net:为什么我不能从我自己的存储过程中获取返回值?

java - 发送 POST 到 HTTPS - 逻辑问题