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 :

Update avec des join


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut Update avec des join
    Bonjour,

    J'ai une colonne qui a un format comme ceci:

    Je veux changer le "000" par un terme que je trouve dans une autre table. J'ai fait ceci, mais j'ai une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE base.rr AS RR
    SET	(RR.intitule = TRIM(RIGHT(RR.intitule,3) || RU.nom
    	,RR.nomregie = TRIM(RIGHT(RR.intitule,3) || RU.nom)
    FROM base.rr AS RR
    	LEFT JOIN base.rpasse AS RP
    		ON RR.idrr = RP.idg_rr
    		LEFT JOIN base.rutils AS RU
    			ON RP.numuser = RU.numuser
    		LEFT JOIN base.rgroupes AS RGR
    			ON RP.numgroupe = RGR.numgroupe AND RP.idg_rr = RGR.id_rr
    WHERE RGR.groupeutilisateur = 1
    Comment corriger?
    Cordialement,
    Vandman

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 546
    Billets dans le blog
    10
    Par défaut
    Bonsoir,

    Ce serait plus simple avec le code et le message d'erreur, mais visiblement il manque des parenthèses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET	(RR.intitule = TRIM(RIGHT(RR.intitule,3)) || RU.nom
    	,RR.nomregie = TRIM(RIGHT(RR.intitule,3)) || RU.nom)
    Parenthèses éventuellement à positionner après la concaténation, selon ce que vous voulez obtenir

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 133
    Par défaut
    Les parenthèses autour du SET sont mal placées...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2011
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 371
    Par défaut
    Bonjour,

    Effectivement, al1_24 a raison.

    J'ai en plus modifié un peu la requette, elle fonctionne bien maintenant. Je poste donc la correction si ca peu servir à quelqu'un.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE base.rr AS RR
    SET	intitule = REPLACE (RR.intitule, TRIM(RIGHT(RRG.intitule,3)), RU.nom)
    	,nomrr = REPLACE (RR.nomrr, TRIM(RIGHT(RRG.intitule,3)), RU.nom)
    FROM base.rr RRG
    	LEFT JOIN base.rpasse AS RP
    		ON RRG.idrr = RP.idg_rr
    		LEFT JOIN base.rutils AS RU
    			ON RP.numuser = RU.numuser
    		LEFT JOIN base.rgroupes AS RGR
    			ON RP.numgroupe = RGR.numgroupe AND RP.idg_rr = RGR.id_rr
    WHERE RGR.regisseur = 1 AND RRG.intitule = RR.intitule
    Petite explication de ce qui ne marchait pas:

    Dans postgres (je ne sais pas pour les autres bases de données), il n'est pas possible d'avoir le même alias dans la ligne UPDATE et FROM. Je n'ai pas trouvé l'explication malgré le fait que j'ai trouvé des exemple dans ce sens???

    Cordialement,
    Vandman

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    En effet, vous ne pouvez pas utiliser deux fois le même alias dans un même niveau d'imbraction de requete.

    En revanche, vous devriez pouvoir utiliser un alias comme cible de l'UPDATE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    UPDATE RR
    SET	intitule = REPLACE (RR.intitule, TRIM(RIGHT(RRG.intitule,3)), RU.nom)
    	,nomrr = REPLACE (RR.nomrr, TRIM(RIGHT(RRG.intitule,3)), RU.nom)
    FROM base.rr AS RR
    	LEFT JOIN base.rpasse AS RP
    		ON RR.idrr = RP.idg_rr
    		LEFT JOIN base.rutils AS RU
    			ON RP.numuser = RU.numuser
    		LEFT JOIN base.rgroupes AS RGR
    			ON RP.numgroupe = RGR.numgroupe AND RP.idg_rr = RGR.id_rr
    WHERE RGR.groupeutilisateur = 1
    Notez que vous pourriez remplacer votre jointure sur RGR et sur RP par des jointures internes, puisque de toute façon votre clause WHERE rendra impossible les lignes où RGR.groupeutilisateur est NULL.

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

Discussions similaires

  1. Update avec des apostrophes
    Par nmicoud dans le forum Sql Developer
    Réponses: 4
    Dernier message: 16/11/2007, 16h31
  2. Java MySQL Update avec des apostrophes
    Par Prosis dans le forum JDBC
    Réponses: 7
    Dernier message: 04/01/2007, 13h36
  3. LIMIT calcul mal avec des JOIN
    Par FMaz dans le forum Requêtes
    Réponses: 21
    Dernier message: 12/07/2006, 03h37
  4. UPDATE avec INNER JOIN
    Par steelidol dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 03/03/2006, 23h56
  5. UPDATE avec des variables Delphi ...
    Par Kokito dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/03/2004, 22h35

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