Com­ment faire un UP…
 
Notifications 
Reti­rer tout

[Réso­lu] Com­ment faire un UPDATE d’une colonne, à par­tir d’une sous-requête sans la répé­ter pour exclure les valeurs nulles ?

Posts
Uti­li­sa­teurs
Reac­tions
102  Vu
0
Début du sujet

Bon­jour, je dois mettre à jour un groupe d’en­re­gis­tre­ments d’une table via une sous-requête dont le résul­tat ne doit pas être nul car les colonnes à mettre à jour n’ac­ceptent pas les valeurs nulles. Jus­qu’à pré­sent, je répé­tais la sous-requête 2 fois : 1 fois pour obte­nir un résul­tat, et une fois pour condi­tion­ner la mise à jour à l’exis­tence d’un résul­tat. Com­ment évi­ter cette répétition ?

Exemple :

UPDATE GECOFIC.diabolo1 AS d1
    SET d1.nomgroupe = (SELECT RTRIM(b.nom) concat ' ' concat RTRIM(b.prenom) FROM
        gecofic.agdip01c b INNER JOIN gecofic.agstp20 a ON b.matr = a.leader WHERE a.nivstr = 3
        AND a.codstr = d1.groupe AND a.typo = '' FETCH FIRST 1 ROWS ONLY)
    WHERE exists (SELECT * FROM
        gecofic.agdip01c b INNER JOIN gecofic.agstp20 a ON b.matr = a.leader WHERE a.nivstr = 3
        AND a.codstr = d1.groupe AND a.typo = '' FETCH FIRST 1 ROWS ONLY);  

Éti­quettes du sujet
2 Réponses 
0
Début du sujet

Bon­jour, il est éga­le­ment pos­sible d’u­ti­li­ser l’ins­truc­tion MERGE :

MERGE INTO GSCD99ET04.EVTPART40 AS T USING (

       SELECT NATURE, ID_CRIT, REQUETE_CATALOGUE

           FROM TESTFIC.EVTPART40

           WHERE REQUETE_CATALOGUE <> ' '    ) AS S ON S.NATURE = T.NATURE AND S.ID_CRIT = T.ID_CRIT

       WHEN MATCHED THEN UPDATE SET T.REQUETE_CATALOGUE = S.REQUETE_CATALOGUE WITH UR;

Cette méthode com­bine les avan­tages des 2 autres méthodes : les enre­gis­tre­ments ne sont pas tous mis à jour si on ne trouve rien par la sous-requête (NULL à trai­ter) et on n’a pas à répé­ter 2 fois le SELECT pour évi­ter les valeurs nulles.

0
Début du sujet

On peut créer une vue pour chaque table conte­nant les colonnes com­munes aux 2 et faire un insert * comme indi­qué par Fré­dé­ric dans la 1ère réponse.

Share :