Voici une version simplifiée de ma table.Pourquoi la mise à jour ne fonctionne-t-elle pas avec une jointure interne?
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
L'exigence est de mettre à jour la colonne NUMBERSENT dans la table tblAgent avec le SUM (Services) de table tblServices.
Je suis venu avec cette déclaration de mise à jour.
/*Works*/
UPDATE tblagent t
SET t.numbersent =
(SELECT SUM(services)
FROM tblservices x
WHERE t.agentid = x.agentid
GROUP BY x.agentid)
Lorsque je change la syntaxe de cette instruction en syntaxe INNER JOIN, elle échoue.
/*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)
Cela pose une erreur ORA-01427: sous-requête une seule rangée retourne plus d'une ligne
Pourquoi la deuxième déclaration jetterait une erreur?
+1. C'est un message d'erreur assez explicite ... la sous-requête doit retourner une ligne et elle en retourne plus d'une. – ceejayoz