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 :

Requête pour la mise à jour d'une table


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 70
    Par défaut Requête pour la mise à jour d'une table
    Bonjour a tous,

    J'ai une question sûrement très bête et facile pour les pros sur SQL mais moi c'est pas mon truc.

    J'ai une table A avec plusieurs colonnes dont 2 bien particulière:
    une colonne produit_id et une colonne quantité.

    Dans une table B, j'ai plusieurs colonnes dont également 2 colonnes avec produit_id et une colonne quantités.

    Je souhaiterais faire un update de la Table A avec les quantités de la table B
    un truc du style

    Update table A
    set quantité A = quantité B when produit_id A = produit_id B

    J'espère avoir été clair. D'avance merci pour votre aide

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Utilisez MERGE

  3. #3
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Par défaut
    Bonjour,

    Il y a plusieurs moyens de faire cette opération.

    Vous pouvez faire un update tout simple avec une sous-requête pour récupérer la donnée souhaitée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE TABLE_A a
    SET quantite = (SELECT quantite
                    FROM   TABLE_B b
                    WHERE  b.produit_id = a.produit_id);
    Ou bien utiliser l'ordre MERGE (syntaxe plus complexe que la première solution, mais plus approprié à la situation; on pourra également l'adapter par la suite, par exemple pour insérer une nouvelle ligne quand on ne trouve pas dans table_a le produit_id trouvé dans table_b; ce n'est pas pour rien que skuatamad vous l'a conseillé pendant que j'écrivais) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MERGE INTO TABLE_A a
    USING TABLE_B b
    ON (a.produit_id = b.produit_id)
    WHEN MATCHED THEN UPDATE SET a.quantite = b.quantite;

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Citation Envoyé par Baldrick Voir le message
    ....

    Vous pouvez faire un update tout simple avec une sous-requête pour récupérer la donnée souhaitée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE TABLE_A a
    SET quantite = (SELECT quantite
                    FROM   TABLE_B b
                    WHERE  b.produit_id = a.produit_id);
    Où comment mettre des valeurs à null si la condition de jointure n'est pas réalisée.

    Cette requete est totalement différente de l'autre proposée avec un merge.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Où comment mettre des valeurs à null si la condition de jointure n'est pas réalisée.

    Cette requete est totalement différente de l'autre proposée avec un merge.
    Good point. Je crois que j'ai gagné le droit de copier cent fois "Je n'oublierai pas les valeurs NULL" pour demain.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 70
    Par défaut
    Merci a tous les 2. J'essaie ça dès ce soir!!!

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 70
    Par défaut
    Je viens d'essayer et aucune des 2 ne fonctionne.

    L'update me dit: sous interrogation ramenant un enregistrement de plus d'une ligne

    La technique merge me dit a.produit_id non definit...

    Qui dit mieux??

  8. #8
    Membre expérimenté
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Par défaut
    Plus d'une ligne retournée ? produit_id n'est donc pas la clé de table_B ?

    Alors, nous avons besoin d'une information supplémentaire pour notre condition de mise à jour : dans le cas où il y a plusieurs lignes pour un même produit_id, comment peut-on déterminer celle qui doit faire foi ?

    Et pour ce qui est de a.produit_id non défini... J'avoue que je ne lai jamais rencontrée... Est-ce que vous pouvez donner le code de l'erreur ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 70
    Par défaut
    L erreur avec merge est ORA-00904.

    Il ne me paraît pourtant impossible que dans la table b figure 2 fois le même produit_id sachant que oui produit_id n est pas la clé de la table b

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 70
    Par défaut
    Alors autant pour moi, effectivement dans la table b, produit_id peut être de la même valeur. Ceci dit, la quantité associée aux n lignes du même produit_id est toujours la même, seul le prix du produit change.

    J ai donc 3 lignes par exemple pour un même produit id. Les 3 lignes indiquent la même quantité. Donc peu importe la ligne que je choisi pour faire mon up date de la table À. Un critère différenciant les 3 lignes est une colonne de la table b s appelant Type_prix et pouvant prendre la valeur 1 2 ou 3. Ainsi finalement chaque produit_id est présent 3 fois dans la table b avec 3 lignes: une en type_prix1, une en type_prix 2 et l autre en type_prix 3

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/01/2012, 21h11
  2. Mise à jour d'une table à partir du résultat d'une requête
    Par zoharcryss dans le forum Langage SQL
    Réponses: 12
    Dernier message: 18/08/2009, 15h33
  3. [AC-2003] Mise à jour d'une table depuis requête regroupement
    Par buzz73 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/07/2009, 12h09
  4. Mise à jour d'une table à partir d'une requête
    Par erwan.bodere dans le forum SQL
    Réponses: 4
    Dernier message: 04/09/2008, 19h27
  5. Réponses: 3
    Dernier message: 18/07/2007, 17h20

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