【问题标题】:Stored procedure error : subquery returns more than 1 value存储过程错误:子查询返回超过 1 个值
【发布时间】:2021-01-27 07:16:42
【问题描述】:

我的问题是我在尝试执行存储过程时遇到错误:

子查询返回超过 1 个值

这是我的代码:

DELIMITER //
    CREATE PROCEDURE bdfutbol.insertar_equipo (in _nomEquipo varchar(40), in _codLiga char(5),
        in _localidad varchar(60),in _internacional tinyint, out resultadoL TINYINT(1),out resultadoI TINYINT(1)    )
        BEGIN
            set contadorInicial = (select FOUND_ROWS() FROM equipos);
            set resultadoL=(SELECT if (EXISTS (select codLiga from ligas where codLiga=_codLiga),1,0));
            SET resultadoI=0;
            
            if resultadoL=1 THEN 
                BEGIN
                    INSERT INTO equipos values (null,_nomEquipo,_codliga,_localidad,_internacional);
                    if @contadorInicial!=(select FOUND_ROWS() from equipos) then set resultadoI=1;
                    END IF;
                END;
            END IF;
         END //
DELIMITER;

我的问题是我不知道是什么导致了这个错误,我已经测试了所有子查询,它们只返回一行,任何形式的帮助都将不胜感激。

感谢 found_rows 返回行而不是轮数的建议

【问题讨论】:

    标签: mysql sql stored-procedures subquery procedure


    【解决方案1】:

    我不知道你真正想要实现什么逻辑,但问题是这个逻辑:

    if @contadorInicial!=(select FOUND_ROWS() from equipos) then set resultadoI=1;
    

    子查询从equipos 中选择的行数与表中的行数一样多。

    我不知道你想做什么,但我认为不止这条线需要修复。您可以考虑提出一个新问题,包括样本数据、期望的结果以及您想要完成的任务的解释。

    【讨论】:

    • 我正在尝试创建一个插入 x 的过程
    • 从 MySQL 8.0.17 开始,ROUND_ROWS() 函数不被弃用吗?最好使用 COUNT() 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多