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 utilisant la même table


Sujet :

Langage SQL

  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut Update utilisant la même table
    Bonjour,

    je ne sais pas si c'est possible et je me casses la tête dessus depuis quelques heures, donc bon.

    J'ai en fait une table que je souhaites mettre à jour par rapport aux données qu'elle contient elle même, je m'explique :

    Une table `detail` : contenant les champs :
    - cle1
    - cle2
    - lig
    - val

    Et un exemple de contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cle1   cle2    lig     val
    ------ ------- -------- --------
    1	1	1	NULL
    1	1	2	10
    1	2	1	NULL
    1	2	2	20
    J'aimerais donc updater la colonne cle1 et cle2 identique en utilisant la valeur de lig = 2 pour mettre à jour val pour lig = 1 (en faisant +1) par exemple)

    Mon update :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    update detail
       set val = d.val + 1
    from detail d
    where detail.cle1 = d.cle1
      and detail.cle2 = d.cle2
      and detail.lig = 1 -- la ligne qu'on veut mettre à jour
      and d.lig = 2 -- notre ligne de référence
    Seulement ce genre de choses n'est bien sûr pas toléré

    Le résultat final attendu étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    cle1   cle2    lig     val
    ------ ------- -------- --------
    1	1	1	11
    1	1	2	10
    1	2	1	21
    1	2	2	20
    Auriez-vous une idée de comment m'y prendre?


  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Salut,
    S'il n'y a qu'un lig=2 par couple (cle1,cle2), essaie comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE detail d1
       SET val = (select d2.val+1 from detail d2 
                    where d2.cle1=d1.cle1
                    and d2.cle2=d1.cle2
                    and d2.lig=2)
    where d1.lig=1

  3. #3
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Vue la structure de la table, je suppose que cle1, cle et lig sont tous les trois des clés de la table.
    Dans ce cas, on ne peut avoir qu'une seule valeur de lig pour une valeur donnée de cle1 et une autre de cle2. dans ce sens, la requête de skuatamad est parfaite.

    Mais si les colonnes cle1, cle2 et lig ne sont pas des clés dans la table, cela veut donc dire pour une valeur donnée de cle1 et une autre de cle2, on pourrait en avoir plusieurs pour lig. Dans ce cas, la requête proposée par skuatamad ne marchera plus; à moins que tu utilises une valeur statistique (comme le minimum, le maximum, la moyenne, ...) pour val.

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par GodGives Voir le message
    Vue la structure de la table, je suppose que cle1, cle et lig sont tous les trois des clés de la table.
    Dans ce cas, on ne peut avoir qu'une seule valeur de lig pour une valeur donnée de cle1 et une autre de cle2. dans ce sens, la requête de skuatamad est parfaite.
    C'est le cas

    En plus la réponse était tout simple, je m'en veux de pas avoir vu ça avant



    P.S: pas encore résolu car pas encore testé

  5. #5
    Membre habitué Avatar de GodGives
    Inscrit en
    Août 2007
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Août 2007
    Messages : 456
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par buchs Voir le message
    En plus la réponse était tout simple, je m'en veux de pas avoir vu ça avant
    c'est ce qui se passe souvent! on peut atteindre nos objectifs; seulement qu'on a besoin parfois de stimulant (comme ce forum)...

    Merci de nous tenir informés après le test.

  6. #6
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Ça fonctionne.



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

Discussions similaires

  1. [MySQL-5.1] UPDATE SELECT sur même table
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/08/2013, 10h08
  2. Update depuis la même table
    Par sky_perrinos dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/08/2012, 15h50
  3. synchro entre 2 forms utilisant la même table
    Par Ever dans le forum Access
    Réponses: 2
    Dernier message: 23/03/2006, 20h53
  4. UPDATE sur la même table
    Par Papino dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 02/09/2005, 10h38
  5. Réponses: 2
    Dernier message: 29/09/2004, 09h07

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