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 Max


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Update Max
    Bonjour, j'aimerai savoir comment attribuer la valeur max à un champ, en ne faisant qu'un seul update (si c'est possible)

    Exemple :

    create table #temp
    (
    Cptr int
    )


    insert into #temp
    (
    Cptr
    )
    values
    (
    0
    )

    insert into #temp
    (
    Cptr
    )
    values
    (
    0
    )

    insert into #temp
    (
    Cptr
    )
    values
    (
    1
    )

    select
    *
    from
    #temp

    update
    tmp
    set
    tmp.Cptr = (select max(Cptr) + 1 from #temp )
    from
    #temp tmp
    where
    Cptr = 0

    select
    *
    from
    #temp

    drop table #temp

    Et j'obtiens :


    (1 ligne(s) affectée(s))


    (1 ligne(s) affectée(s))


    (1 ligne(s) affectée(s))

    Cptr
    -----------
    0
    0
    1

    (3 ligne(s) affectée(s))


    (2 ligne(s) affectée(s))

    Cptr
    -----------
    2
    2
    1

    (3 ligne(s) affectée(s))


    or je voudrais obtenir à la fin :

    Cptr
    --------------
    2
    3
    1

    Je pourrai le faire avec une boucle ou autre, mais comment le faire en une seule instruction ?

    Merci.

  2. #2
    Membre habitué Avatar de VinceTlse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 163
    Points : 191
    Points
    191
    Par défaut
    Bonjour,
    Il faudrait que tu mettes les balises [ code ] et [ /code ] car c est assez illisible.
    Merci
    Pourquoi faire aujourd'hui ce que l'on peut faire demain ...

  3. #3
    Membre habitué Avatar de VinceTlse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 163
    Points : 191
    Points
    191
    Par défaut
    En effet, ce résultat est normal.
    La requete " select max(Cptr) + 1 from #temp " est exécutée en première et retourne la valeur X+1. Ensuite l'ordre update va inséré X+1 à chaque fois.
    Je crois que si tu veux avoir le maximum a chaque update d'une ligne, tu devras sûrement passer par une procedure PL/SQL qui mettra a jour la table ligne à ligne et non pas en une seule fois.
    Pourquoi faire aujourd'hui ce que l'on peut faire demain ...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Oui, j'avais espéré qu'il existait une petite subtilité qui m'aurait permis de ne pas devoir passer par un moyent détourné.

    Je te remerice.

    (La prochaine fois, je penserai au balise

  5. #5
    Membre habitué Avatar de VinceTlse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 163
    Points : 191
    Points
    191
    Par défaut
    Avec plaisir.
    Je ne sais pas quel SGBD tu utilise, mais je pense pas qu'il doit trop dur réaliser cela avec une fonction.
    Pourquoi faire aujourd'hui ce que l'on peut faire demain ...

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

Discussions similaires

  1. update avec select max
    Par rudak dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/12/2009, 13h56
  2. Requete update avec sous requete et max en jointure
    Par youyoupapayou dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/08/2009, 17h19
  3. Problème Update avec Max.
    Par Kloun dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/06/2007, 15h06
  4. UPDATE avec une valeur MAX
    Par Bobtop dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/06/2006, 13h08
  5. UPDATE+max= Incompatibilité?
    Par $grm$ dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/05/2004, 17h43

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