каждый раз, когда я пытался запустить этот запрос, он выдавал эту ошибку 1242 - Subquery возвращает более 1 строки
INSERT INTO 'tender_request' ('Tender_Request_ID', 'Cost', 'Document', 'Status', 'supplierID', 'TenderID') VALUES ('5556', '900', NULL, 'Active', '1', '652')
на самом деле, я не знаю, где проблема. и это мой код в таблице tender_request:
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
Моя первая таблица: Tender_request (Tender_Request_ID
, Cost
, Document
, Status
, TenderID
supplierID
, TenderID
)
Моя вторая таблица: KPI (KPI_ID
, Cost
, Delivery
, Service
, Quality
, Experience
, supID
, tenID
)
Третья таблица: Тендер (Tender_ID
, Name
, Description
, Estimated_cost
)
Попробуйте это вместо этого:
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
Вы проверили, сколько строк возвращает этот запрос? Я уверен, что больше 1.
SET @Ecost=( SELECT 'estimated_cost'
FROM tender
INNER JOIN tender_request ON 'tender'.'Tender_ID'='tender_request'.'TenderID');
Попытайтесь добавить LIMIT 1
в конце.
tender
, как вы знаете, какой получить? LIMIT 1
получает только первый. Не уверен, что это то, что вы хотите.
SET @Ecost=( SELECT estimated_cost FROM tender INNER JOIN tender_request ON tender.Tender_ID=tender_request.TenderID where tender_request.TenderID=new.TenderID);
MySQL
. ПочемуTOP 1
???