【问题标题】:MySQL - Result consisted of more than one rowMySQL - 结果包含多于一行
【发布时间】:2014-11-30 19:59:50
【问题描述】:

我是 MySQL 菜鸟,一直在尝试创建存储过程。下面的代码返回错误Error Code: 1172. Result consisted of more than one row。我究竟做错了什么? (我使用的是 MySQL 工作台)

CREATE DEFINER=`root`@`localhost` PROCEDURE `season_private_league_user`(
IN user_id INT,
OUT league_name VARCHAR(25),
OUT host_user VARCHAR(30))
BEGIN

    DECLARE userteamid INT;
    DECLARE var_league_name VARCHAR(25);
    DECLARE var_host_user VARCHAR(30);

    # Retrieve user team from user_id
    SELECT CS_USER_TEAMS_ID INTO userteamid
    FROM classicseasonmodel_classicseasonuserteam
    WHERE user_id = user_id;

    #LEAGUE NAME
    SELECT classicseasonmodel_classicseasonprivateleague.private_league_name INTO var_league_name
    FROM   classicseasonmodel_classicseasonuserteamprivateleague
    INNER JOIN classicseasonmodel_classicseasonprivateleague
    ON classicseasonmodel_classicseasonuserteamprivateleague.private_league_id=classicseasonmodel_classicseasonprivateleague.CS_PRIVATE_LEAGUE_ID
    WHERE  user_team_id = userteamid;

    #HOST_USER
    SELECT classicseasonmodel_classicseasonprivateleague.host_user_id INTO var_host_user
    FROM   classicseasonmodel_classicseasonuserteamprivateleague
    INNER JOIN classicseasonmodel_classicseasonprivateleague
    ON classicseasonmodel_classicseasonuserteamprivateleague.private_league_id=classicseasonmodel_classicseasonprivateleague.CS_PRIVATE_LEAGUE_ID
    WHERE  user_team_id = userteamid;

    SET league_name = var_league_name;
    SET host_user = var_host_user;

END

CALL season_private_league_user(2, @league_name, @host_user); SELECT @league_name AS league_name; SELECT @host_user AS host_user;

【问题讨论】:

    标签: mysql sql stored-procedures


    【解决方案1】:

    将结果存储在变量中的存储过程中的一个 SELECT 返回多行,这会在此错误中返回。这样你只能在一个变量中存储单个值,而不是多个。

    您可以阅读有关 SELECT...INTO 语句 here 的信息。您可能最感兴趣的部分是:

    选定的值被分配给变量。的数量 变量必须与列数匹配。查询应该返回一个 单行。如果查询没有返回任何行,则带有错误代码的警告 出现1329(无数据),变量值保持不变。如果 查询返回多行,出现错误 1172(结果包括 多于一排)。如果该声明可能 检索多行,可以使用 LIMIT 1 将结果集限制为 一行。

    【讨论】:

      【解决方案2】:

      您的列名和参数名相同。重命名您的输入参数并将命令更改为:

      SELECT CS_USER_TEAMS_ID INTO userteamid
      FROM classicseasonmodel_classicseasonuserteam
      WHERE user_id = @user_id;
      

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 2012-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-15
        • 1970-01-01
        相关资源
        最近更新 更多