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 :

UPDATE multi table


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
    Juin 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 61
    Par défaut UPDATE multi table
    Bonjour,

    Je souhaite faire une requete qui permet de mettre à jour tout les prix à 0 (de la table commande) en multipliant le prix production par le prix unitaire (de la table article). Pour chaque commande, il faudra mettre à jour les prix totaux = 0 par la somme du prix de production par le prix unitaire des articles de la commande correspondante.

    En sachant qu'une commande possède plusieurs articles.

    J'ai pensé à faire une requête mais mes deux essais se sont averés non concluant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE commande cmd inner join article art on art.cmd_id = cmd.cmd_id
       SET cmd.cmd_prix_total = (art.prix_prod * art.prix_unitaire)
     WHERE cmd.cmd_prix_total = 0
    Le résultat de ma requete : missing SET keyword

    J'ai pensé aussi à faire une requête imbriqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE commande cmd
       SET cmd.cmd_prix_total = (SELECT SUM(art.prix_prod *
                                            art.prix_unitaire) AS Invoice_price
                                   FROM commande cmd2
                                  inner join article art on art.cmd_id = cmd2.cmd_id
                                  WHERE cmd2.cmd_prix_total = 0
                                  GROUP BY cmd2.cmd_numero)
     WHERE cmd.cmd_prix_total = 0
    Résultat de la requete : single-row subquery returns more than one row

    Le problème de cette dernière requête est que la requête imbriqué renvoie plusieurs valeurs.

    La version Oracle est : 10g - 10.2.0.4.0

    Quels sont les erreurs que j'ai pu commettre pour avoir pour chaque commande, le prix total de la commande pour chaque articles ?

    Je vous remercie d'avance pour toute aide qui pourra m'être apporté

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Votre jointure entre les tables article et commande me paraît étrange.
    Le numéro de commande serait dans la table des articles ?

    Edit : ah oui, votre table article contient en fait le détail de votre commande, est-ce bien ça ?
    Si oui, la requête suivante devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE commande cmd
       SET cmd.cmd_prix_total = (SELECT SUM(art.prix_prod * art.prix_unitaire)
                                   FROM article art 
                                  WHERE art.cmd_id = cmd.cmd_id)
     WHERE cmd.cmd_prix_total = 0;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 61
    Par défaut
    Merci de ta réponse,
    Le numéro de commande est dans la table commande, le cmd_id, est une clé qui permet identifier quels sont les articles qui appartiennent à une commande.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 61
    Par défaut
    Merci "mnitu" de me mettre sur la voie, je vais investiguer sur toutes les indications que tu as pu me donner.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 61
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Votre jointure entre les tables article et commande me paraît étrange.
    Le numéro de commande serait dans la table des articles ?

    Edit : ah oui, votre table article contient en fait le détail de votre commande, est-ce bien ça ?
    Si oui, la requête suivante devrait faire l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE commande cmd
       SET cmd.cmd_prix_total = (SELECT SUM(art.prix_prod * art.prix_unitaire)
                                   FROM article art 
                                  WHERE art.cmd_id = cmd.cmd_id)
     WHERE cmd.cmd_prix_total = 0;
    Le truc c'est que la sous-requête va donner le prix total de tous les articles de toutes les commandes confondues et il faut justement que je mette à jour uniquement pour chaque commande

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par cvexxx Voir le message
    Le truc c'est que la sous-requete va donner le prix total de tout les articles de toutes les commandes confondues et il faut justement que je mets à jour uniquement pour chaque commandes
    Non, il y a bien jointure dans la sous-requête.
    Essayez !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 61
    Par défaut
    Tu gères ! Cela fonctionne !
    J'étais en train de faire du PL/SQL ! Et cette requête est quand même très optimisée !

    Je te remercie ! @bientôt

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Utilisez la commande Merge ou utilisez une sous-requête corrélée ou utilisez la syntaxe d’update d’un select ou en dernière recours utilisez PL/SQL.

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

Discussions similaires

  1. Requête SQL Update mono ou multi table
    Par d.tellier dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/10/2011, 08h12
  2. problème update multi-tables
    Par steevest dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/10/2009, 11h44
  3. update d'un champ avec select multi-table
    Par maxvador dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/09/2009, 11h54
  4. Un UPDATE multi-table
    Par Séb. dans le forum Requêtes
    Réponses: 5
    Dernier message: 17/07/2008, 03h51
  5. UPDATE multi-tables sous SQL Server
    Par Cybernet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/03/2004, 15h34

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