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

Langage SQL Discussion :

UPDATE concernant plusieurs tables


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut UPDATE concernant plusieurs tables
    Hello à tous
    Voila mon soucis :
    Je souhaiterai modifier un chiffre dans une Table (1) mais en faisant appelle à des calculs d'élement d'autres tables :
    T1 : Tingredient qui contient :NomIngredient et QtéDispo
    T2 : Trec_ing qui contient NomIngredient (clé primaire de la T1), NomRecette(Clé de la T3) et Qté necessaire
    T3 : Trecette contient: NomRecette

    En gros je veux faire un UPDATE qui permet lorsque l'on selectionne une recette (NomRecette), on soustrait la Qté necessaire à la QtéDispo,
    c'est plutot simple il me semble, mais je n'arrive plus à faire d'UPDATE sur 3 tables.

    mes essais donnaient :

    UPDATE Tingredient SET I.QtéDispo = I.QtéDispo - RI.QtéNecessaire
    FROM Tingredient I, Trec_ing RI, Trecette R
    WHERE I.NomIngredient = RI.NomIngredient
    AND RI.NomRecette = R.NomRecette

    Ne sachant pas comment executer ceci sur 3 tables, j'ai mis FROM, mais je me doute que c'est une grosse erreur.

    Faut'il faire une requette imbriquée ? quelle forme ont elles lors de requetes UPDATE ?

    Merci

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par theoffss Voir le message
    En gros je veux faire un UPDATE qui permet lorsque l'on selectionne une recette (NomRecette), on soustrait la Qté necessaire à la QtéDispo

    UPDATE Tingredient SET I.QtéDispo = I.QtéDispo - RI.QtéNecessaire
    FROM Tingredient I, Trec_ing RI, Trecette R
    WHERE I.NomIngredient = RI.NomIngredient
    AND RI.NomRecette = R.NomRecette
    Je pense que ce que ta requête va faire, c'est enlever les quantités nécessires de tous les ingrédients pour toutes les recettes de la table R !

    Il faut remplacer le R.NomRecette par le nom d'UNE recette, celle qui est sélectionnée. La syntaxe dépend du langage qui fait appel à cette requête.

    Ensuite, UPDATE n'aime pas qu'on utilise la table à modifier dans la clause WHERE. Il faut passer par une table temporaire pour faire les jointures et créer le jeu d'enregistrement sur lequel va s'opérer la sélection de la recette à modifier.

    Bon courage
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    effectivement cela va enelver toutes les qté necessaire à tous les ingredient, un simple AND R.NomRecette = ? ... devrait suffire.

    passer par une table temporaire ? comment faire ? je ne comprend pas

    ps : je suis sous access

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Au lieu d'enlever les quantités utilisées par chaque recette au champ QtéDispo de la table Tingredient, je te conseilles plutôt d'ajouter à la table Trecette un champ indiquant combien de recettes ont été effectuées.
    • Tingredient ( NomIngredient, QtéIng )
    • Trec_ing ( #NomIngredient, #NomRecette, QtéNecessaire )
    • Trecette ( NomRecette, NbRecette )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT I.NomIngredient, I.QtéIng - SUM(RI.QtéNecessaire*R.NbRecette) AS QtéDispo
    FROM Tingredient I
      LEFT JOIN Trec_ing RI ON RI.NomIngredient = I.NomIngredient
      LEFT JOIN Trecette R ON R.NomRecette = RI.NomRecette
    GROUP BY I.NomIngredient

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 115
    Par défaut
    merci mais je ne voie pas l'interet du nbrecette,

    Pour la petite histoire, au depart j'ai une requette qui m'affiche les recettes dont je possede les ingredients en Qté suffisante.
    En partant de la, il me faut precisement une requette qui me retire les QtéDispo aux QtéNecessaire.

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Citation Envoyé par theoffss Voir le message
    Pour la petite histoire, ...
    Pour préciser les choses, peux-tu donner la structure de tes tables, et indiquer ce que tu cherches à obtenir au final avec les requêtes.

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Essaie un truc dans ce genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE Tingredient I
    SET I.QtéDispo = I.QtéDispo - RI.QtéNecessaire
    WHERE I.NomIngredient = 
    (
     SELECT RI.NomIngredient
     FROM Trec_ing RI
     WHERE RI.NomRecette = [recette sélectionée])
    La syntaxe de [recette sélectionnée] dépend du langage de l'interface de ton application. Essaie avec un nom de recette en dur pour commencer.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. UPDATE sur plusieurs tables ?
    Par Mos dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/04/2007, 09h37
  2. Réponses: 4
    Dernier message: 26/09/2006, 19h28
  3. Update sur plusieurs tables
    Par yoyopi dans le forum DB2
    Réponses: 4
    Dernier message: 24/07/2006, 09h22
  4. Update de plusieurs tables, import fichier csv sql loader
    Par fusuke dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 18/05/2006, 16h08
  5. update sur plusieurs tables
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 14
    Dernier message: 04/01/2006, 15h30

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