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 :

Mise à jour d'un champ à partir d'une autre table


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Mise à jour d'un champ à partir d'une autre table
    Bonjour tout le monde.

    Je sollicite votre aide pour la construction d'une requête SQL de mise à jour.
    J'ai une table A principale et une table temporaire B que je veux utiliser pour mettre à jour la table A.
    Le champ à mettre à jour dans la table A c'est Codex à partir d'un champ de la table B qui s'appelle Codex1.

    J'ai créé la requête ci-dessous pour mettre à jour mon champ mais rien ne se passe quand je l'exécute. Quelqu'un pourrait-il m'aider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE site_A s
    SET s.codex =(SELECT w.Codex1
    FROM B w
    WHERE
    ress_id = id
    );
    J'utilise Oracle 10g.
    Cordialement.

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 126
    Points
    126
    Par défaut
    Bonjour,

    Attention, en l état, la requête met a jour toutes les lignes de la table A.

    Il faut essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE site_A s
    SET s.codex = (SELECT w.Codex1 FROM B w WHERE w.ress_id = s.id)
    Where s.id In (SELECT w.ress_id FROM B);
    Dans tous les cas, merci
    - d expliquer ce que veut dire "il ne se passe rien" (c est une erreur, aucune ligne n est mise a jour, ...)
    - de donner des infos sur le modele de données et le contenu des tables avec le resultat attendu

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Quand je dis la requête ne fait rien c'est pour dire qu'aucune ligne n'est mise à jour. Je viens d'essayer avec votre requête mais aucune mise à jour n'est effectué sur ma table et pourtant je n'ai aucun message d'erreur.

    Voilà le problème: j'ai créer une table temporaire ke j'appelle B qui contient des informations de mise à jour pour ma table A. A et B ont de commun le champ id_ress et id. L'objectif est d'utiliser les champs id et id_ress pour mettre à jour le champ codex de la table A à partir du champ codex1 de la table B.

    Je ne sais pas si vous comprenez bien ce que je veux dire.
    En cas merci de me donner des pistes.

    Cordialement.

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2008
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 101
    Points : 126
    Points
    126
    Par défaut
    pouvez vous indiquer les données contenues dans des deux tables ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Est-ce que vous faites bien un commit quelque part?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Les données indiquées dans les deux champs sont de type Number

    en gros j'ai ça

    Table A

    ID_Ress|Codex
    A201Y|21026
    BHGF41|325642


    Table B

    ID|Codex1
    A201Y|26542
    BHGF41|56268

    Je veux donc mettre à jour le champ Codex de la table A par le champ codex1 de la table B.

    J'espère que c'est un peu plus claire.

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par zeng49 Voir le message
    Les données indiquées dans les deux champs sont de type Number

    en gros j'ai ça

    Table A

    ID_Ress|Codex
    A201Y|21026
    BHGF41|325642


    Table B

    ID|Codex1
    A201Y|26542
    BHGF41|56268

    Je veux donc mettre à jour le champ Codex de la table A par le champ codex1 de la table B.

    J'espère que c'est un peu plus claire.
    "en gros" oui mais en détail ?? là par exemple on voit la table B qui comporte un champ ID_RESS alors que sur la requete vous utilisez une colonne RESS_ID. Il y a donc une erreur de syntaxe.

    Donc, soit vous avez donné exactement votre contexte et c'est la syntaxe qui pète, soit vous n'avez pas donné exactement toutes les caractérisitique de vos tables et requêtes et on ne peut pas deviner... ça peut etre par exemple entre autres, un pb d'une jointure entre 2 char de différentes dimensions ou plein d'autres trucs qui se cachent dans les détails...

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Avez-vous pris en compte la remarque de 7gyY9w1ZY6ySRgPeaefZ ?
    Car votre requête avec ce que vous indiquez fonctionne très bien.

    Données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    create table TableA
    as
    select 'A201Y' as ID_Ress,  21026 as Codex from dual union all
    select 'BHGF41'          , 325642          from dual;
    -- Table created.
     
    create table TableB
    as
    select 'A201Y' as ID, 26542 as Codex1 from dual union all
    select 'BHGF41'     , 56268           from dual;
    -- Table created.
     
    select ID_Ress, Codex
      from TableA;
     
    ID_RES      CODEX
    ------ ----------
    A201Y       21026
    BHGF41     325642
     
    -- 2 rows selected.
     
    select ID, Codex1
      from TableB;
     
    ID         CODEX1
    ------ ----------
    A201Y       26542
    BHGF41      56268
     
    -- 2 rows selected.
    Mise à jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    update TableA ta
       set ta.Codex = (select tb.Codex1
                         from TableB tb
                        where tb.ID = ta.ID_Ress);
    -- 2 rows updated.
     
    commit;
    -- Commit complete.
    Vérification
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select ID_Ress, Codex
      from TableA;
     
    ID_RES      CODEX
    ------ ----------
    A201Y       26542
    BHGF41      56268
     
    -- 2 rows selected.
    Ou alors vous avez un problème avec le critère de jointure, rajoutez les alias de table dans votre update à ce niveau-là :

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bonjour tout le monde. Pour répondre à la question de 7gyY9w1ZY6ySRgPeaefZ, j'ai bien mis un commit à la fin pour enregistrer ma mise à jour. Je vais à présent essayer les différentes solutions proposées et je vous dirais ce que ça donne.

    Merci

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    J'ai finalement réussi à régler le problème. Soit mes contrôles d'hier n'étaient pas bon parce j'étais fatigué soit c'était dû au fait que le champ que je voulais mettre à jour était de type NUMBER et le champ que je voulais utiliser était de type FLOAT. J'ai reconstruit ma table ma table temporaire en mettant mettant le même type et tout fonctionne avec ma requête d'hier. En tout cas merci à tout le monde.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/05/2014, 12h46
  2. [WD14] mise à jour d'un enregistrement à partir d'une autre table
    Par piogo113 dans le forum WinDev
    Réponses: 9
    Dernier message: 05/05/2010, 19h06
  3. mise à jour d'un champ à partir d'un autre
    Par gravia dans le forum VBA Access
    Réponses: 5
    Dernier message: 04/05/2008, 14h25
  4. Réponses: 6
    Dernier message: 29/06/2006, 14h00
  5. Réponses: 3
    Dernier message: 09/07/2004, 10h23

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