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 :

requête d'insertion après un WITH ? [9.4]


Sujet :

Requêtes PostgreSQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut requête d'insertion après un WITH ?
    Bonjour, pour un projet de développement de page admin qui permet de faire des ajouts et des suppression dans la base grâce à une interface web j'ai un petit problème...

    Il y a une page qui permet de gérer des fonctions (dans la base de donnée il y a donc une table fonction composé de 2 champs : id, libelle).
    Or dans cette table il existe plusieurs libelle avec des ID différent (chaque fonction est plus tard lié à un secteur donc il se peut que certains secteurs ai le même libelle de fonction)

    Je cherche donc à faire un UPDATE de cette table afin de rajouter le trigramme du secteur devant la fonction.

    J'ai les tables suivantes :

    fonction (id,libelle,up_libelle*)
    machine(id, libelle, secteur_id)
    secteur(id,libelle)
    codepannes(id, fonction_id,machine_id)

    * c'est dans ce champ qui est pour le moment vide que je souhaite insérer le nouveau libelle avec le trigramme

    je fais donc des jointures pour remonter de la fonction jusqu'au secteur en question, puis je prend le trigramme du secteur et enfin je concatène le tout.

    j'ai donc fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH fonction_up AS (SELECT DISTINCT f.id AS id,CONCAT(SUBSTRING(up.libelle, 4, 3),'_',f.libelle) AS fonction, f.libelle AS libelle
                  FROM maint_ta_codepannes cp
                  JOIN maint_ta_fonction f ON cp.fonction_id = f.id
                  JOIN maint_ta_machines m ON cp.machine_id = m.id
                  JOIN serm_secteurs up ON up.id = m.secteur_id
                  WHERE f.libelle = 'Presse'
                 )
    UPDATE maint_ta_fonction SET maint_ta_fonction.up_libelle = fonction_up.fonction
    FROM fonction_up;
    Le WITH marche très bien en revanche j'ai fais des recherches ne trouvant pas la solution du UPDATE, j'ai tenté beaucoup de syntaxes différentes, j'ai tenté un WITH suivi d'un MERGE INTO puis faire le UPDATE quand sa match... mais apparemment pgsql est assez fermé pour tout ça et ne prend pas beaucoup de syntaxe en compte ...

    quelqu'un pourrait me guider sur la bonne voie ?

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2019
    Messages : 11
    Points : 9
    Points
    9
    Par défaut solution
    C'est bon j'ai trouvé un moyen j'ai utilisé une table temporaire, je met la solution au cas où :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TEMPORARY TABLE table AS (SELECT DISTINCT f.id AS id, CONCAT(SUBSTRING(up.libelle, 4, 3),'_',f.libelle) AS fonction, f.libelle AS libelle
                         FROM maint_ta_codepannes cp
                         JOIN maint_ta_fonction f ON cp.fonction_id = f.id
                         JOIN maint_ta_machines m ON cp.machine_id = m.id
                         JOIN serm_secteurs up ON up.id = m.secteur_id                                          
                        );
     
    UPDATE maint_ta_fonction ta
    SET up_libelle = t.fonction 
    FROM table t
    WHERE ta.id= t.id;

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/11/2011, 16h06
  2. [Oracle] afficher currval après requête d'insertion
    Par Laera dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/06/2009, 08h50
  3. TRIGGER d'insertion après une requête INSERT
    Par nasimpat7 dans le forum Développement
    Réponses: 11
    Dernier message: 06/04/2009, 15h45
  4. Requête d'insertion dans une base ACCESS
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/11/2006, 17h41
  5. Optimisation d'une requête d'insertion
    Par fdraven dans le forum Oracle
    Réponses: 15
    Dernier message: 01/12/2005, 14h00

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