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

Requêtes MySQL Discussion :

Calcul et sous-requêtes [MySQL-5.5]


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    commercial
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : commercial
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Par défaut Calcul et sous-requêtes
    Bonjour, après plusieurs heures de recherche, je n'arrive pas faire aboutir ma requête. Merci pour votre aide.
    je dispose de deux tables vente et detail vente. je désire soustraire de la table vente un montant additionné depuis la table détail vente.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE ventes INNER JOIN detail_vente ON detail_vente.id_vente = ventes.id_ventes
    SET lq = ventes.lq - (SELECT liquide FROM ventes INNER JOIN detail_vente ON detail_vente.id_vente = ventes.id_ventes WHERE detail_vente.controle = 0 GROUP BY ventes.id_ventes)
    WHERE ventes.id_ventes = 186
    La sous requête "SELECT" passe très bien
    Si je remplace la sous requête par un montant ca passe très bien aussi

    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 358
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 358
    Billets dans le blog
    17
    Par défaut
    Je vois que la sous-requête SELECT n'est pas corrélée au UPDATE et qu'il ne retourne pas un scalaire
    Et que tu utilises à chaque fois les 2 mêmes tables vente et detail_vente.

    Quelques lignes de tes tables en guise d'exemple, et le résultat attendu aideraient.

  3. #3
    Membre averti
    Homme Profil pro
    commercial
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : commercial
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ventes_rbst INNER JOIN detail_vente ON detail_vente.id_vente = ventes_rbst.id_ventes
    SET montant_rbst = ventes_rbst.montant_rbst - (SELECT total FROM detail_vente INNER JOIN detail_vente ON detail_vente.id_vente = ventes_rbst.id_ventes WHERE detail_vente.controle = 0)
    table detail_vente
    Nom : Capture1.PNG
Affichages : 101
Taille : 10,2 Ko

    table ventes_rbst
    Nom : Capture2.PNG
Affichages : 104
Taille : 14,8 Ko

    Désolé pour le délais mais en visualisant la réponse que j'essaye d'écrire je m'aperçois que ma première requete ne peut pas fonctionner et celle-ci non plus d'ailleurs mais elle est déjà plus claire.

    Le but recherché est de parcourir la table détail vente et de soustraire le montant du champ 'total' de la table detail_vente au champ montant_rbst de la table ventes avec pour jointure les champs ventes_rbst.id_ventes et detail_vente.id_vente

    Merci

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 681
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Comme il peut y avoir plusieurs lignes détail, il faut calculer la somme des montants.

    Ce qui donne :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    update vente_rbst   RB
    inner join 
         (select DT.id_vente
               , sum(DT.total) as TOT
          from detail_vente DT
          group by DT.id_vente
         ) as SUBQ
       on SUBQ.id_vente=RB.id_vente 
    set RB.montant_rbst = RB.montant_rbst - SUBQ.TOT
    ;

  5. #5
    Membre averti
    Homme Profil pro
    commercial
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : commercial
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Par défaut
    OK et merci je comprend le principe.
    J'essaye de traduire en SQL par ce que le code tel que ... ne fonctionne pas mais je suis très content de l'aide et je m'attache à l'instant

    Merci

  6. #6
    Membre averti
    Homme Profil pro
    commercial
    Inscrit en
    Octobre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : commercial
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2016
    Messages : 26
    Par défaut
    Voici le code qui fonctionne

    et encore merci a escartefigue et Séb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE ventes_rbst INNER JOIN
    (select detail_vente.id_vente
               , sum(detail_vente.total) as TOT
          from detail_vente where detail_vente.controle = 0
          group by detail_vente.id_vente) as SUBQ
          ON SUBQ.id_vente = ventes_rbst.id_ventes
          SET ventes_rbst.montant_rbst = ventes_rbst.montant_rbst - SUBQ.TOT

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 681
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par jmp65 Voir le message
    J'essaye de traduire en SQL par ce que le code tel que ... ne fonctionne pas
    C'est très surprenant, votre requête modifiée est exactement la même que celle que j'ai proposée, sauf que vous nommez les tables in extenso alors que j'utilise des alias, ce qui est quand même plus pratique
    L'erreur vient peut être du fait que j'ai nommé la table vente_rbst alors que chez vous c'est ventes_rbst
    Mais au détail des noms d'objets près(j'ai pu faire des fautes de frappe), la syntaxe de ma requête est tout à fait valide avec MySQL 5.x et plus

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

Discussions similaires

  1. Calcul avec une sous-requête
    Par jmp65 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 05/03/2019, 11h12
  2. [AC-2007] Calcul dans une sous requête
    Par PSlayeur dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2014, 17h10
  3. Calculer un pourcentage avec sous-requêtes
    Par nadsky dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 30/10/2008, 15h55
  4. calcul dans une requête
    Par blaz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/12/2003, 11h31
  5. Réponses: 3
    Dernier message: 18/05/2003, 01h16

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