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

Requêtes MySQL Discussion :

MySQL: Probleme d'UPDATE avec sous requete SELECT


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut MySQL: Probleme d'UPDATE avec sous requete SELECT
    Bonjour à tous,
    j'ai parcouru les forums, les docs, le web sans trouver de réponse à mon problème :
    J'ai 2 tables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CREATE TABLE TABLE1
    (RELIDX INTEGER,
     WORIDX INTEGER,
     WEIIDX INTEGER,
     RELIND INTEGER
    )
    INSERT INTO TABLE1 (1, 32, 123, 5)
    INSERT INTO TABLE1 (2, 32, 413, 9)
    INSERT INTO TABLE1 (3, 32, 1269, 15)
    TABLE1 contient donc :
    RELIDX,WORIDX,WEIIDX,RELIND
    1,32,123,5
    2,32,413,9
    3,32,1269,15

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE TABLE2
    (WEIIDX INTEGER,
     WEIVALUE INTEGER
    )
    INSERT INTO TABLE1 (123, 600)
    INSERT INTO TABLE1 (413, 950)
    INSERT INTO TABLE1 (1269, 350)
    TABLE2 contient donc :
    WEIIDX,WEIVALUE
    123,600
    413,950
    1269,350

    Le but du jeu est de trouver pour chaque WORIDX de TABLE1 le min des RELIND correspondants.
    Select min(RELIND) from TABLE1 GROUP BY WORIDX
    Donne l'enregistrement (1,32,123,5).
    Appelons RELINDREF la valeur de RELIND pour cet enregistrement (=5).

    Pour cet enregistrement on récupère le WEIIDX (=123) qui permet de faire la jointure avec TABLE2 et récupérer la valeur du WEIVALUE correspondante. Appelons ça WEIVALUEREF (=600).
    Ensuite pour chaque enregistrement de TABLE1 ayant le même WORIDX, je récupère la valeur du TABLE2.WEIVALUE. Si cette valeur est > WEIVALUEREF alors le TABLE1.RELIND correspondant prend la valeur RELINDREF.
    Dans l'exemple, c'est le cas du deuxième enregistrement de TABLE1 pour lequel la valeur de WEIVALUE est 950. Le RELIND de cet enregistrement (9) prend la valeur 5. Le troisième n'est pas modifié car le WEIVALUE qui lui correspond est < WEIVALUEREF.

    Au final je veux donc me retrouver avec TABLE1 contenant :
    RELIDX,WORIDX,WEIIDX,RELIND
    1,32,123,5
    2,32,413,5
    3,32,1269,15

    Ces tables contiennent des centaines de milliers d'enregistrements, je ne peux donc pas me permettre trop de fantaisies pour des questions de perfs.
    Qui serait capable de faire cet update en 1 requête ?
    Contrainte : il faut que la requête soit compatible avec MySQL donc pas d'utilisation de la même table dans l'update et dans des sous-select.
    J'ai essayé avec des variables, sans succès.

  2. #2
    Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Pour ceux que ça intéresse, j'ai finalement fait ça en deux requêtes (un select pour remplir une table temporaire puis un update de ma table à partir du contenu de cette table temporaire)
    Si qq'un arrive à le faire en une requête je suis qd même preneur, pour la beauté du geste...

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

Discussions similaires

  1. update avec sous requete
    Par oracleur dans le forum SQL
    Réponses: 2
    Dernier message: 05/03/2008, 17h59
  2. Requete Update avec sous requete et jointure
    Par javaboy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/05/2007, 11h03
  3. Requete Update avec sous requete
    Par joziel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/08/2006, 15h15
  4. problème update avec sous requetes
    Par stoz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2005, 16h44
  5. problemes de performances avec les requetes select
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/07/2003, 13h39

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