Вот упрощенная версия моей таблицы.Почему обновление не работает с внутренним соединением?
CREATE TABLE TBLAGENT(AGENTID NUMBER, NUMBERSENT NUMBER, AGENTNAME VARCHAR2(100));
INSERT INTO TBLAGENT VALUES(100,NULL,'KNIGHT');
INSERT INTO TBLAGENT VALUES(200,NULL,'SUPES');
INSERT INTO TBLAGENT VALUES(300,NULL,'SPIDEY');
CREATE TABLE TBLSERVICES(AGENTID NUMBER, SERVICES NUMBER);
INSERT INTO TBLSERVICES VALUES(100,44);
INSERT INTO TBLSERVICES VALUES(200,13);
INSERT INTO TBLSERVICES VALUES(300,24);
INSERT INTO TBLSERVICES VALUES(100,34);
INSERT INTO TBLSERVICES VALUES(200,13);
INSERT INTO TBLSERVICES VALUES(300,24);
SELECT TA.AGENTID, SUM(SERVICES), TA.AGENTNAME, TA.NUMBERSENT
FROM TBLAGENT TA, TBLSERVICES TS
WHERE TA.AGENTID = TS.AGENTID
GROUP BY TA.AGENTID, TA.AGENTNAME, TA.NUMBERSENT
Требование, чтобы обновить столбец NUMBERSENT в таблице tblAgent с SUM (Services) из таблицы tblServices.
Я придумал это заявление об обновлении.
/*Works*/
UPDATE tblagent t
SET t.numbersent =
(SELECT SUM(services)
FROM tblservices x
WHERE t.agentid = x.agentid
GROUP BY x.agentid)
Когда я изменяю синтаксис этого оператора на синтаксис INNER JOIN, он терпит неудачу.
/*Throws an error*/
UPDATE tblagent t
SET t.numbersent =
(SELECT SUM(services)
FROM tblservices x INNER JOIN tblAgent t
ON t.agentid = x.agentid
GROUP BY x.agentid)
Это подбрасывает об ошибке ORA-01427: однорядные подзапрос возвращает более одной строки
Почему бы второй оператор выдаст ошибку?
+1. Это довольно самоочевидное сообщение об ошибке ... подзапрос должен возвращать одну строку, и он возвращает больше одного. – ceejayoz