Mysql 子查询中有多个值出错,甚至认为它在while循环中

Mysql 子查询中有多个值出错,甚至认为它在while循环中,mysql,sql,database,Mysql,Sql,Database,该程序的目标是: 检查可以在模型输入modelID和serviceID上执行的服务,并获取服务的预算以及所使用的部件。表的设置方式意味着我们必须找到具有服务指定的服务所需的PartName的PartID。理论上,零件名的相同名称可能会重复出现无限次。所以我们得到的PartID需要检查它们是否与模型兼容,我们假设每个模型只有一个partname,即以一个ID结尾。 然后获取该PartID的价格,并将其与服务中指定的金额相乘,然后将服务价格相加 我们尝试用while循环修复子查询中的多行,但是由于一

该程序的目标是: 检查可以在模型输入modelID和serviceID上执行的服务,并获取服务的预算以及所使用的部件。表的设置方式意味着我们必须找到具有服务指定的服务所需的PartName的PartID。理论上,零件名的相同名称可能会重复出现无限次。所以我们得到的PartID需要检查它们是否与模型兼容,我们假设每个模型只有一个partname,即以一个ID结尾。 然后获取该PartID的价格,并将其与服务中指定的金额相乘,然后将服务价格相加

我们尝试用while循环修复子查询中的多行,但是由于一些奇怪的原因,我们看不到它仍然抱怨它。我们试图制定并开始工作的程序如下:

    DROP PROCEDURE IF EXISTS `BudgetSpec`;
DELIMITER //
CREATE PROCEDURE BudgetSpec (IN GetSpecServiceID MEDIUMINT, IN GetModelID MEDIUMINT)
BEGIN
    DROP TABLE IF EXISTS partid_tempt;
    CREATE temporary table partid_tempt (ID MEDIUMINT NOT NULL auto_increment, PartID MEDIUMINT, primary key(id)) engine = innodb;
    SET @SpecSerCheck = (SELECT SScbpoMID FROM specificservicescanbepreformedonmodel WHERE SpecServiceID = GetSpecServiceID AND ModelID = GetModelID);
    if @SpecSerCheck IS NOT NULL then
        SET @Part_name = (SELECT PartName FROM specificservice_amount WHERE SpecServiceID = GetSpecServiceID);
        INSERT INTO partid_tempt (PartID)
        SELECT PartID FROM part WHERE PartName = @Part_name;
        SET @v_counter = 1;
        SET @v_max = (SELECT COUNT(ID) FROM partid_tempt) + 1;
        start transaction;
        while @v_counter < @v_max do
            SET @PM_ID = (SELECT PcwMID FROM partcombatiablewithmodel WHERE ModelID = GetModelID AND PartID IN (SELECT PartID FROM partid_tempt WHERE ID = @v_counter));
            if @PM_ID IS NOT NULL then
                SET @v_counter = @v_max;
            end if;
            SET @v_counter = @v_counter + 1;
        end while;
        commit;
        if @PM_ID IS NOT NULL then
            SET @Part_price_n = (SELECT Part_ValuePrice FROM part_value WHERE PartID = @id AND ConditionID = 1);
            SET @Part_price_u = (SELECT Part_ValuePrice FROM part_value WHERE PartID = @id AND ConditionID = 2);
            SET @SS_price = (SELECT SpecService_ValuePrice FROM specificservice_value WHERE SpecServiceID = GetSpecServiceID);
            SET @SS_amount = (SELECT SpecService_Amount FROM specificservice_amount WHERE SpecServiceID = GetSpecServiceID);
            SET @S_sum_n = @SS_price + @Part_price_n * @SS_amount;
            SET @S_sum_u = @SS_price + @Part_price_u * @SS_amount;
            SELECT 'Service price with new part:', @S_sum_n;
            SELECT 'Service price with used part:', @S_sum_u;
        end if;
    end if;
END //
DELIMITER;

如果不是因为我们已经没有办法解决这个问题,我们也不会寻求帮助,因为我们真的需要一些新的输入。我们的数据库位于:。

您能添加准确的错误并指出错误发生在哪一行吗?请调用budgetspec1,1;/*SQL错误1242:子查询返回超过1行*/但不知道这发生在哪一行我怀疑它发生在其中一个集合的一个查询中,该集合需要一个值ResultSet。您是否尝试过使用指定的输入运行单个查询,并查看哪个查询返回的行数超过一行?单独运行所有selects并发现是这样一句话:SET@SS_price=SELECT。。。。。所以我在最后加了一个极限0,1,现在它工作得很好。感谢您提出单独运行它们的想法:不知道你需要什么:考虑在所有的值都是相同的情况下添加不同的而不是限制,并且你宁愿选择一个错误来随机选择一个值。