est-il possible d'incrémenter les champs a et b d'une table (A.a et A.b) en utilisant les valeurs c et d d'une autre table (B.c B.d) pour toute la ligne de A où A.x == B.z?
Je deviens fou avec cette requête
DB2 et le standard SQL n’ont pas de clause FROM dans une instruction UPDATE. Vous devez donc séparer clairement les étapes suivantes:
.
Voici un exemple:
UPDATE TABLE A
SET A.FLD_SUPV = ( SELECT B.FLD_SUPV
FROM TABLEA A, TABLEB B, TABLEC C,TABLED D
WHERE A.FLD1= B.FLD1
AND A.FLD_DT >= B.FLD_FM_DT
AND A.FLD_DT <= B.FLD_THRU_DT
AND A.FLD_DT > D.FLD_THRU_DT
AND A.FLD_DT < C.FLD_EFF_DT )
WHERE EXISTS ( SELECT B.FLD_SUPV
FROM TABLEA A, TABLEB B, TABLEC C,TABLED D
WHERE A.FLD1= B.FLD1
AND A.FLD_DT >= B.FLD_FM_DT
AND A.FLD_DT <= B.FLD_THRU_DT
AND A.FLD_DT > D.FLD_THRU_DT
AND A.FLD_DT < C.FLD_EFF_DT )
Pour mettre à jour deux champs, vous pouvez utiliser un exemple comme celui-ci:
UPDATE table1 t1
SET (col1, col2) = (
SELECT col3, col4
FROM table2 t2
WHERE t1.col8=t2.col9
)
L'optimiseur verra que les sous-requêtes de la clause SET et de la clause FROM Sont identiques et il devrait les fusionner dans le plan d'exécution interne.
Oui c'est possible. Vous pouvez essayer quelque chose comme ça:
MERGE INTO A
USING (SELECT c, d, z from B) B
ON (A.x = B.z)
WHEN MATCHED THEN
UPDATE SET A.a = A.a + B.c, A.b = A.b + B.d;
Vous pouvez en savoir plus sur MERGE ici .
Testé sous DB2 10.6
Pratiquement la même chose que @jhnwsk, mais avec des raccourcis dans les tableaux.
Merge into "PRODUCTION"."COUNTRY" as N
using (SELECT OD.NAME,OD.KEY from "DEVELOPMENT"."COUNTRY" as OD) as O
on (O.KEY = N.KEY)
WHEN MATCHED THEN
UPDATE SET N.NAME=O.NAME;