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 PostgreSQL Discussion :

Transcodage de valeurs


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut Transcodage de valeurs
    Salut,

    Je dois remplacer les valeurs des colonnes d'une table par des valeurs correspondantes. J'ai la solution de prendre chaque valeur possible et de lui appliquer une requête du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE maTable SET maColonne = maValeur_n_correspondante WHERE maColonne = maValeur_n_initiale
    Le souci c'est que j'ai pas mal de valeurs différentes et qu'étant donné la taille de ma base chaque requête de ce style prend un vingtaine de minutes.

    Je me demande s'il est possible de faire plus rapide et plus concis, par exemple en utilisant une table de correspondance auxiliaire.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 014
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 014
    Points : 23 702
    Points
    23 702
    Par défaut
    Bonjour,

    Oui, passer par une table de correspondance sera certainement plus efficace.
    Une fois cette table définie, il est tout à fait possible de faire une jointure dans un UPDATE sous Postgres, avec une syntaxe du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE maTable 
    SET maColonne = c.maValeur_n_correspondante 
    FROM maTableCorrespondance c
    WHERE maTable.maColonne = c.maValeurInitiale
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par ced Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE maTable 
    SET maColonne = c.maValeur_n_correspondante 
    FROM maTableCorrespondance c
    WHERE maTable.maColonne = c.maValeurInitiale
    Merci...mais j'ai l'impression que ça ne change rien au problème : je dois toujours écrire autant de requêtes que de valeurs de correspondance différentes.

    Pour éviter cela il faudrait écrire quelque chose qui ne dépend que du nom des colonnes de la table auxiliaire (col_valeur_initiale et col_valeur_transcodée) et pas des valeurs.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Non si dans maTableCorrespondance tu mets par exemple les couples (3,10), (4,5), (1,12) ça va bien remplacer en un seul update 3 par 10, 4 par 5 et 1 par 12.
    Si ce n'est pas ce que tu veux faire, peut-être que tu devrais donner un exemple de ce que tu cherches avec l'avant et l'après.

  5. #5
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 330
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par estofilo Voir le message
    Non si dans maTableCorrespondance tu mets par exemple les couples (3,10), (4,5), (1,12) ça va bien remplacer en un seul update 3 par 10, 4 par 5 et 1 par 12.
    Si ce n'est pas ce que tu veux faire, peut-être que tu devrais donner un exemple de ce que tu cherches avec l'avant et l'après.
    Désolé en fait ça doit être bon, c'est simplement un problème d'écriture : ce que tu appelle maValeur_n_correspondante et maValeurInitiale ce sont en fait les deux colonnes de la table decorrepondance.

Discussions similaires

  1. récupérer la valeur du 2ème champ dans un DBLookUpListBox
    Par jakouz dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/07/2004, 16h45
  2. Recherche fonctions rendant la valeur
    Par Bertrand_Collet dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/11/2002, 12h05
  3. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  4. [XSLT]position d'un element de valeur specifique
    Par squat dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/07/2002, 16h42
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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