IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Un genre d' UPDATE dans un SELECT [11g]


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Par défaut Un genre d' UPDATE dans un SELECT
    Bonjour à tous,

    Mes droits d'accès actuel sur mon serveur SQL ne me permettent pas de créer ou modifier des tables et leur contenu. Dans ce contexte, j'aimerais savoir s'il y a un moyen de redéfinir la valeur de certaines cellules d'une première requête SQL par celle d'une seconde.

    À titre d'exemple, supposons que ma première requête me donne le résultat ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    WITH RAW_DATA AS(
    	SELECT 'ABC' AS COLA, 'A' AS COLB, 11 AS COLC FROM DUAL UNION ALL
    	SELECT 'DEF'        , 'X'        , 34	      FROM DUAL UNION ALL
    	SELECT 'GHI'        , 'C'        , 23	      FROM DUAL
    )
    SELECT * FROM RAW_DATA;
     
    COLA COLB COLC
    ---- ---- ----
    ABC  A    11
    DEF  X    34
    GHI  C    23
    et que ma 2e requête me donne ce résultat ci-bas (notez que la colonne COLC est manquante):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH CORRECTION AS(
    	SELECT 'DEF' AS COLA, 'B' AS COLB FROM DUAL
    )
    SELECT * FROM CORRECTION;
     
    COLA COLB 
    ---- ---- 
    DEF  B
    J'aimerais trouver le moyen de "corriger" les valeurs de la colonne COLB de ma 1re requête par celles de ma 2e requête. Le lien entre ces deux requêtes est la colonne COLA. Bref, j'aimerais que le résultat final soit:

    COLA COLB COLC
    ---- ---- ----
    ABC A 11
    DEF B 34
    GHI C 23

    Notez que ma deuxième requête va toujours contenir que les colonnes COLA devant être corrigées, ainsi que la nouvelle valeur requise (COLB).

    Merci beaucoup!

  2. #2
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Bonjour,

    Une jointure externe devrait faire l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    WITH RAW_DATA AS(
        SELECT 'ABC' AS COLA, 'A' AS COLB, 11 AS COLC FROM DUAL UNION ALL
        SELECT 'DEF'        , 'X'        , 34          FROM DUAL UNION ALL
        SELECT 'GHI'        , 'C'        , 23          FROM DUAL
    ),
    CORRECTION AS(
        SELECT 'DEF' AS COLA, 'B' AS COLB FROM DUAL
    )
    SELECT
    RAW_DATA.COLA,
    NVL(CORRECTION.COLB,RAW_DATA.COLB) COLB,
    RAW_DATA.COLC
    FROM RAW_DATA LEFT OUTER JOIN CORRECTION ON (RAW_DATA.COLA = CORRECTION.COLA)
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    COLA   COLB   COLC
    DEF    B      34
    ABC    A      11
    GHI    C      23

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 30
    Par défaut
    @Bibeleuh:

    Ça fonctionne effectivement à merveille!

    En fait, j'avais pensé à la jointure, mais je ne voyais pas comment y arriver... Bref, je n'avais jamais pensé à utiliser le NVL().

    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. SELECT et UPDATE dans une même requete
    Par gael dans le forum Langage SQL
    Réponses: 6
    Dernier message: 24/01/2011, 01h57
  2. SELECT et UPDATE dans la même requête
    Par tom42 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/07/2007, 15h35
  3. Update et affectation select dans variable
    Par dolyne.b dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 22/05/2007, 17h44
  4. comment faire un insert, + select + update dans la meme requete
    Par jam92400 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 27/06/2006, 18h33
  5. [Sybase] Select dans une select loop en C
    Par Claudio dans le forum Sybase
    Réponses: 2
    Dernier message: 29/04/2003, 18h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo