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 Procédural MySQL Discussion :

mettre à jour le champ d'une table en fonction de l'entité suivante ?


Sujet :

SQL Procédural MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut mettre à jour le champ d'une table en fonction de l'entité suivante ?
    Bonjour,

    J'ai une table :

    ma_table
    id INT AUTO_INCREMENT PRIMARY KEY,
    valeur INT,
    mon_bool BOOLEAN DEFAULT 0

    Je voudrais parcourir l'ensemble des éléments de cette table et attribuer mon_bool = 1 si la valeur de l'id suivante est incrémentée par rapport à l'id courant et si la valeur est supérieure.

    Concrétement (ça ne marche pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPTADE ma_table t1 
    SET t1.mon_bool = 1 
    WHERE (SELECT t2.valeur 
      FROM ma_table t2 
      WHERE t2.id = (t1.id +1) AND t2.valeur > t1.valeur);
    J'ai une erreur d'impossibilité d'utiliser ma_table dans le FROM.

    J'ai également pensé à un curseur, mais pour chaque valeur de ma_table parcourue, celle-ci est read only dans le curseur, je ne peux pas faire l'UPDATE.

    Pouvez-vous m'aider là-dessus ?

    En vous remerciant,

    C. Tobini

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    MySQL refuse de lire et d'écrire sur la même table. L'astuce consiste à ajouter un niveau de sous-requête dans le FROM, car MySQL implémente ces sous-requête par des tables temporaires (ce qui lève le refus ci-dessus).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPTADE ma_table t1 
    SET t1.mon_bool = 1 
    WHERE (SELECT t2.valeur 
      FROM (select valeur from ma_table) t2 
      WHERE t2.id = (t1.id +1) AND t2.valeur > t1.valeur);

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut
    Bonjour et merci de la réponse,

    Pratique plutôt que faire une procédure avec curseurs, je vais expérimenter vite fait !

    Bonne soirée,

    C. Tobini

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Points : 123
    Points
    123
    Par défaut
    Et ben c'est parfait !

    Merci encore et bonne journée,

    C. Tobini

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/12/2010, 12h09
  2. [AC-2003] Mettre à jour un champ d'une table en fonction de la valeur d'une combobox
    Par Chagui dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/11/2010, 18h26
  3. Réponses: 4
    Dernier message: 03/07/2008, 15h53
  4. Comment mettre à jour 1 champ d'une table via une autre tabl
    Par cpasmoibiensur dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/02/2006, 13h33

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