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 Firebird Discussion :

Mettre à jour une table avec les données d'une autre table


Sujet :

SQL Firebird

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 51
    Points : 32
    Points
    32
    Par défaut Mettre à jour une table avec les données d'une autre table
    Bonjour,
    je voudrais en une seule requête mettre à jour des quantités article dans la table article à partir des quantités relevées dans la table inventaire_article.

    Sur Wikipedia, j'ai trouvé ça ;
    Mise à jour d'une table à partir des informations d'une autre table : UPDATE TABLE1 SET ( champ3, champ4 ) = ( SELECT val32, val13 FROM TABLE2 WHERE TABLE1.CHAMP1 = TABLE2.CHAMP2 ) WHERE ( CHAMP1 ) IN ( SELECT CHAMP2 FROM TABLE2)
    Dans moncontexte, ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE article SET (stock_physique) =
    ( SELECT quantite_article FROM inventaire_article where article.code_article = inventaire_article.code_article)
    WHERE
    ( article.code_article) IN ( SELECT code_article FROM inventaire_article
    where inventaire_article.code_inventaire = 262)
    Ça ne marche pas, à cause des parenthèses dans "SET (stock_physique)" et si je les enlève, ma sous-requête renvoyant plusieurs tuples, ça me retourne "multiple rows in singleton select"

    Je pensais que le problème était simple.
    Il me reste la solution de traiter ça de manière algorithmique dans Delphi, avec un Update paramétré par enregistrement de la table inventaire. Mais j'aurais bien aimé faire ça en une seule requête.
    Merci de m'avoir lu.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 51
    Points : 32
    Points
    32
    Par défaut Yes !!!
    Avec l'aide d'un collègue nous avons trouvé.
    Il fallait ajouter un clause dans la sous-requête, ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    UPDATE article
    SET
      stock_physique =
      (SELECT quantite_article FROM inventaire_article where article.code_article = inventaire_article.code_article and inventaire_article.code_inventaire=262)
     
    WHERE
    ( article.code_article) IN ( SELECT code_article FROM inventaire_article
    where inventaire_article.code_inventaire = 262)
    En revanche, je confirme, en Firebird pas de possibilité de MAJ sur plusieurs champs (le problème des parenthèses) en une seule sous-requête.

    Pour produire l'exemple trouvé dans Wikipedia, il faut transformer ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE TABLE1 SET 
    champ3 =  (SELECT val32 FROM TABLE2 WHERE TABLE1.CHAMP1 = TABLE2.CHAMP2 ) ,
    champ4  =  (SELECT  val13 FROM TABLE2 WHERE TABLE1.CHAMP1 = TABLE2.CHAMP2 ) 
    WHERE ( CHAMP1 ) IN ( SELECT CHAMP2 FROM TABLE2)
    Ça marche, j'ai essayé, car en fait j'avais besoin de remplacements sur plusieurs champs.

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Andorre

    Informations forums :
    Inscription : Juin 2004
    Messages : 219
    Points : 241
    Points
    241
    Par défaut
    Salut

    Si j'ai bien compris..... il te manque un SUM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE article a SET stock_physique = 
         (SELECT sum(i.quantite_article) 
          FROM inventaire_article i
          where a.code_article = i.code_article and i.code_inventaire = 262)
    A+

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Si j'ai bien compris..... il te manque un SUM
    Merci pour la réponse, mais non ce n'est pas ça.
    L'article n'apparaît qu'une seule fois dans l'inventaire, donc pas de SUM.

    En revanche il pouvait apparaître dans plusieurs inventaires, d'où la nécessité de mettre à jour qu'à partir d'un inventaire donné.
    Sinon la requête envoyait bien plusieurs lignes, pour une valeur attendue.

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

Discussions similaires

  1. Remplir une table avec les données d'une base
    Par doc dans le forum Général Java
    Réponses: 2
    Dernier message: 25/06/2012, 00h48
  2. Mise à jour d'une table avec les données d'une autre
    Par Equinoxe5 dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/09/2011, 08h00
  3. Créer une collection avec les données d'une table
    Par hidiho dans le forum PL/SQL
    Réponses: 1
    Dernier message: 30/06/2011, 09h40
  4. [MySQL] Remplir une table avec les données d'une autre table
    Par Souri84 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/11/2010, 19h41
  5. Réponses: 3
    Dernier message: 09/04/2006, 12h58

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