简体   繁体   中英

error: #1242 - Subquery returns more than 1 row

each time I tried to run this query it gives this error 1242 - Subquery returns more than 1 row

INSERT INTO `tender_request` (`Tender_Request_ID`, `Cost`, `Document`, `Status`, `supplierID`, `TenderID`) VALUES ('5556', '900', NULL, 'Active', '1', '652')

actually, I don't know where is the problem. and this is my code on tender_request table:

  BEGIN

SET  @Ecost=( SELECT `estimated_cost` 
  FROM tender
  INNER JOIN tender_request ON `tender`.`Tender_ID`=`tender_request`.`TenderID`);

IF(@Ecost>new.Cost) then
  UPDATE `kpi` INNER JOIN tender_request on tender_request.TenderID=kpi.tenID 
set kpi.Cost=10 where TenderID=new.TenderID limit 1;
 END IF;
END

My first table : Tender_request( Tender_Request_ID , Cost , Document , Status , supplierID , TenderID )

My Second table : KPI( KPI_ID , Cost , Delivery , Service , Quality , Experience , supID , tenID )

Third table : Tender( Tender_ID , Name , Description , Estimated_cost )

Have you checked how many rows this query return? I'm sure more than 1.

SET  @Ecost=( SELECT `estimated_cost` 
  FROM tender
  INNER JOIN tender_request ON `tender`.`Tender_ID`=`tender_request`.`TenderID`);

Try to add LIMIT 1 at the end.

Try this instead:

BEGIN

  SET  @Exist=( SELECT 1
  FROM tender
  INNER JOIN tender_request ON 
 `tender`.`Tender_ID`=`tender_request`.`TenderID`
  WHERE `estimated_cost`>new.Cost AND 
 `tender`.`Tender_ID`=new.TenderID Limit 1;

 IF(@Exist=1) then
    UPDATE `kpi` INNER JOIN tender_request on 
    tender_request.TenderID=kpi.tenID 
    set kpi.Cost=10 where TenderID=new.TenderID;
 END IF;
END

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM