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 champ après addition


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Update champ après addition
    Bonjour

    Je souhaite faire une mise à jour d'un champ

    J'utilise deux tables une table article avec le champ quantité ( qui doit être mis à jour) et uen table réception

    Je dois récuperer la donnee quantité de la table article et l'addiotinner à la quantité de réception pour un article déterminé

    Pourriez vous m'aider svp ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Sans les informations demandées par les règles de ce forum, il nous sera difficile de vous répondre.

    Et montrez-nous ce que vous avez déjà essayé.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    Voic ce que j'ai essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE articles   
    SET   (articles.q_stk = articles.q_stk+temp_in.quantite) 
    FROM articles a, temp_in b  
    WHERE  ( a.libelle = b.désigniation)
    Merci

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Peut-être comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    update articles inner join temp_in
    set articles.q_stk = articles.q_stk+temp_in.quantite

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour

    Merciopur la réponse mais erreur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE articles INNER JOIN temp_in
    SET articles.q_stk = articles.q_stk+temp_in.quantite where ( a.libelle = b.désigniation)
    erreur de syntaxe ....

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    La syntaxe de "update from" est la suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    update <table_à_mettre_à_jour>
    set <colonne1> = <valeur1>, <colonne2> = <valeur2>, ..., <colonneX> = <valeurX>
    from <table_à_mettre_à_jour> <alias1>
    <jointures>
    where <conditions>

    A noter que tous les SGBD ne supportent pas cette syntaxe.

    Par exemple, SQL Server la supporte, mais pas Oracle.

    Attention aussi, cette syntaxe n'est pas conforme à la norme SQL. Il existe des cas où le résultat peut être imprévisible !

    La syntaxe (pourrie) qui est conforme à la norme SQL est la suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update <table_à_mettre_à_jour>
    set <colonne1> = (<sous_requête>)
    where <condition_avec_sous_requête>

    Dans votre cas particulier :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    update articles
    set q_stk = (select a.qstk + t.quantite from articles a inner join temp_in t on t.désignation = a.libelle where a.libelle  = articles.libelle)
    where libelle in (select libelle from temp_in)

  7. #7
    Membre confirmé
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Points : 542
    Points
    542
    Par défaut
    Salut,

    Je dirais plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE articles INNER JOIN temp_in
    ON articles.libelle =  temp_in.désigniation
    SET articles.q_stk = articles.q_stk +temp_in.quantite
    Cependant, comme vous n'avez pas précisé votre SGBD , cette syntaxe ne fonctionnera pas sous Oracle où il faudra utiliser des sous-requêtes ...

    Et au fait : désigniation s'écrit désignation sans le "i"

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    NON

    http://msdn.microsoft.com/fr-fr/library/ms177523.aspx

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    [ WITH <common_table_expression> [...n] ]
    UPDATE 
        [ TOP ( expression ) [ PERCENT ] ] 
        { { table_alias | <object> | rowset_function_limited 
             [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
          }
          | @table_variable    
        }
        SET
            { column_name = { expression | DEFAULT | NULL }
              | { udt_column_name.{ { property_name = expression
                                    | field_name = expression }
                                    | method_name ( argument [ ,...n ] )
                                  }
              }
              | column_name { .WRITE ( expression , @Offset , @Length ) }
              | @variable = expression
              | @variable = column = expression
              | column_name { += | -= | *= | /= | %= | &= | ^= | |= } expression
              | @variable { += | -= | *= | /= | %= | &= | ^= | |= } expression
              | @variable = column { += | -= | *= | /= | %= | &= | ^= | |= } expression
            } [ ,...n ] 
     
        [ <OUTPUT Clause> ]
        [ FROM{ <table_source> } [ ,...n ] ] 
        [ WHERE { <search_condition> 
                | { [ CURRENT OF 
                      { { [ GLOBAL ] cursor_name } 
                          | cursor_variable_name 
                      } 
                    ]
                  }
                } 
        ] 
        [ OPTION ( <query_hint> [ ,...n ] ) ]
    [ ; ]
     
    <object> ::=
    { 
        [ server_name . database_name . schema_name . 
        | database_name .[ schema_name ] . 
        | schema_name .
        ]
        table_or_view_name}

    Exemple de la MSDN (dans la même page)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE dbo.Table2 
    SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB
    FROM dbo.Table2 
        INNER JOIN dbo.Table1 
        ON (dbo.Table2.ColA = dbo.Table1.ColA);

    On voit bien que l'UPDATE se fait sur la table table2, et que cette même table est la première mentionnée dans le FROM.

    PS : Ça tombe d'ailleurs TRÈS bien, parce que l'exemple est que absolument exactement la même chose que la question initiale !

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci à tous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE articles INNER JOIN temp_in
    ON articles.libelle =  temp_in.désigniation
    SET articles.q_stk = articles.q_stk +temp_in.quantite
    Cette requete fonctionne très bien

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Grmpf

    C'est quoi votre SGBD

Discussions similaires

  1. Problème champ après import d'excel vers access
    Par David M dans le forum Access
    Réponses: 6
    Dernier message: 16/10/2005, 12h53
  2. vérification champ après champ d'un formulaire
    Par Francis_R dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/10/2005, 09h55
  3. Pb UPDATE champ nullable avec la valeur Null
    Par zev dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 01/02/2005, 15h04
  4. SOS recup champ après préocédure stockée
    Par seb92 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 24/11/2004, 08h47
  5. Update champ avec le meme champ de la meme table
    Par Baquardie dans le forum Langage SQL
    Réponses: 7
    Dernier message: 04/06/2004, 12h17

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