Ho due tabelle.
Tabella A (IDA, Nome, QP)
Valori di A ( 1, alfa, 100), (2, beta, 100), (3, delta, 100), (4, gamma, 100)
Tabella B (IDB, QV, FK_IDA)
Valori di B ( 1, 10, 1), ( 2, 10, 2), ( 3, 10, 2), ( 4, 10, 3), ( 5, 10, 4)
Come si vede il codice 2 di beta compare due volte nella tabella di B.
Voglio aggiornare i dati QP della tabella A, riducendo il suo valore con i dati QV della tabella B.
Nella chiave esterna FK_IDA ci sono questi valori (1, 2, 2, 3, 4).
Ho usato questo codice:
UPDATE
P
SET QP = QP - QV
FROM [Tabella A] AS P INNER JOIN [Tabella B] AS O ON P.IDA = O.FK_IDA
WHERE O.FK_IDA = P.IDA;
ma succede che il valore di beta invece di diminuire di 20, diminuisce solo di 10.
Lo stesso succede usando quest'altro codice:
MERGE INTO [Tabella A] AS P
USING
(
SELECT QV, FK_IDA
FROM [Tabella B]
GROUP BY QV, FK_IDA
) AS O
ON P.IDA = O.FK_IDA
WHEN MATCHED THEN
UPDATE SET
P.QP = P.QP - O.QV;
Perché ?