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 :

[PSQL] Sous requête renvoyant plusieurs lignes


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [PSQL] Sous requête renvoyant plusieurs lignes
    Bonjour à tous,

    Je viens vers vous car j'ai un problème dans ma requête que je n'arrive pas à résoudre même via internet.

    Je réalise une table temporaire (bm_fme), qui récupère les données d'un CSV (cela fonctionne bien).
    Puis j'essais d'update certains champs de ma table cible (bm_test) a partir de la table temporaire et donc du CSV.

    Seulement, j'ai une sous requête qui renvois plusieurs lignes (tous les code_insee) qui me sont nécessaire afin de mettre à jour les bons champs en comparant les code_insee de la table et du csv.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    UPDATE amenagement.bm_test
    SET (nom,adresse,cp,ville,ouverture,mail,site_web,secteur,regime_juridique,type_de_bm,tel,fax,reseaux,mediatheque,_version_)=
    (
     (SELECT nom FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT adresse FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT cp FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT ville FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT ouverture FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT mail FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT site_web FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT secteur FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT regime_juridique FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT type_de_bm FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT tel FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT fax FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT reseaux FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT mediatheque FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee),
     (SELECT _version_ FROM amenagement.bm_fme WHERE bm_test.code_insee= bm_fme.code_insee)
     )
    where  bm_test.code_insee IN(SELECT bm_test.code_insee FROM amenagement.bm_fme,bm_test WHERE bm_test.code_insee= bm_fme.code_insee);
    Je pense que l’erreur vient de la dernière condition ( le WHERE qui retourne plusieurs lignes) car lorsque je rentre un code_insee en dur la modification se réalise.

    Une aide/ piste/ point de vue différent serait le bienvenu,
    Je vous remercie d'avance.

  2. #2
    Membre chevronné

    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2013
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 372
    Par défaut
    Bonjour,
    Je pense que tu te compliques grave la vie.
    Ceci ne fonctionne pas? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE amenagement.bm_test A
    SET (nom,adresse,cp,ville,ouverture,mail,site_web,secteur,regime_juridique,type_de_bm,tel,fax,reseaux,mediatheque,_version_)=
    (B.nom, B.adresse, B.cp, B.ville, B.ouverture, B.mail, B.site_web, B.secteur, B.regime_juridique, B.type_de_bm, B.tel, B.fax, B.reseaux, B.mediatheque, B._version_)
    FROM amenagement.bm_fme B
    WHERE A.code_insee= B.code_insee
    ;
    J'imagine qu'on doit même pouvoir faire plus court.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour MaximeCh ,

    Alors c'est un code qui n'est pas de moi et que je reprend donc j'essais de le comprendre et de l'adapter.

    Ta solution fonctionne parfaitement.
    (Juste une 'faute' inattention tu à oublié le B. avant secteur dans le set du update, mais c'est un détail)

    Je te remercie infiniment de la rapidité et de la qualité de ta réponse !

    Bonne journée.

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

Discussions similaires

  1. [procédure stockée] Requête renvoyant plusieurs lignes avec MySQL
    Par ourseblanche dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 16/01/2010, 17h13
  2. [procédure stockée] Requête renvoyant plusieurs lignes
    Par ourseblanche dans le forum MySQL
    Réponses: 4
    Dernier message: 21/07/2009, 10h50
  3. sous requête avec plusieurs lignes
    Par souarit dans le forum Bases de données
    Réponses: 0
    Dernier message: 09/02/2009, 01h18
  4. [Requête] Rassembler plusieurs lignes sous une même ligne
    Par Laure041 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 25/04/2008, 16h40
  5. Réponses: 9
    Dernier message: 18/08/2005, 13h16

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