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

Langage SQL Discussion :

UPDATE à partir de données d'une autre table


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut UPDATE à partir de données d'une autre table
    Bonjour,
    Je suis en train d'alimenter la base de données d'une application web de gestion de projet. Je récupère mes informations de fichier Excel. Pas vraiment de problème pour l'import dans une table temporaire ("rsmequip") avec la commande \copy. Jusque là, tout vas bien.

    Seulement, mes données sont en vrac dans le fichier Excel et j'ai du mal à y mettre un peu d'ordre. Alors j'ai décidé de procéder champs par champs pour alimenter ma table finale.
    Je travaille donc dans temp_projet (je sais, ça fait beaucoup de temporaire mais c'est juste le temps de bien comprendre le cheminement)

    je récapitule :
    - la table RSMEQUIP récupère les données, en vrac, du fichier Excel;
    - la table TEMP_PROJET est une version simple (sans contrainte de clé) de ma table finale

    J'ai déjà insérer les données les plus simples (qui ne sont pas en double) dans ma table TEMP_PROJET.

    J'aimerais maintenant, par exemple, mettre à jour le champ placinvest :
    - récupérer la valeur de placinvest dans la table RSMEQUIP
    - mettre à jour la table TEMP_PROJET avec cette valeur

    Quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE TEMP_PROJET set placinvest=(
    	select RSMEQUIP.placinvest 
    	from RSMEQUIP, TEMP_PROJET 
    	where TEMP_PROJET.codepsn=RSMEQUIP.code)
    seulement j'ai l'erreur suivante : "ERROR: more than one row returned by a subquery used as an expression" ce qui, si je comprends bien, veut dire que j'ai plusieurs valeurs pour cette condition... Mais même en rajoutant une deuxième condition sur le libellé du projet (unique pour chaque projet), j'ai toujours la même erreur..

    J'espère être claire .. Je suis aussi un peu rouillée en SQL...

    Merci d'avance et bonne journée


    PS : Base PostGre - PGAdmin III

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 103
    Points : 28 400
    Points
    28 400
    Par défaut
    Pourquoi faire un produit cartésien entre RSMEQUIP et TEMP_PROJET dans ta sous-requête ?
    Tu ne peux qu'obtenir plusieurs lignes...

  3. #3
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    En fait, je voudrais que pour chaque projet, on remplisse le placinvest...
    Mais rien que l'écrivant, j'me rend compte qu'il me faudrait déjà une itération (j'ai les idées plus claires en début de journée, forcément,...)

    Puis quand je regarde, j'ai 1094 code projet différents et 1356 placinvest donc déjà, au niveau du fichier Excel c'est la gadoue...


    En fait, pour reformuler ma question :
    Je voudrais faire un update sur plusieurs lignes avec une valeur différente pour chaque id (valeur obtenue grâce à une requête)

    En gros, mettre le résultat de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT distinct placinvest, id_projet
    FROM RSMEQUIP
    dans la table TEMP_PROJET , sur la ligne du bon id_projet

  4. #4
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    Oups désolée, je crois que je me suis un peu trop retourné le cerveau...

    cette requête à l'air de faire ce que je cherche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    update ma_table set mon_champ = t.mon_autrechamp
    from mon_autre_table t
    where t.code = code
    Bon, toutes les lignes ne sont pas remplies mais ce doit être un problème de données...

    Merci quand même d'avoir jeter un œil !

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 103
    Points : 28 400
    Points
    28 400
    Par défaut
    La syntaxe UPDATE ... FROM n'est pas conforme au standard SQL mais spécifique au SGBD que tu utilises (et que tu n'as pas précisé).

    Ta première requête péchait à la ligne 3 où tu appelais une nouvelle fois la table TEMP_PROJET dans la clause FROM de la sous-requête.

    Pour rester conforme au standard SQL, tu pouvais écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    UPDATE  TEMP_PROJET
    SET     placinvest =
            (   SELECT  RSMEQUIP.placinvest 
                FROM    RSMEQUIP 
                WHERE   TEMP_PROJET.codepsn = RSMEQUIP.code
            )
    WHERE   EXISTS
            (   SELECT  1 
                FROM    RSMEQUIP 
                WHERE   TEMP_PROJET.codepsn = RSMEQUIP.code
            )
    ;

  6. #6
    Membre actif Avatar de _Carole
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 105
    Points : 264
    Points
    264
    Par défaut
    Oui oui la requête était fausse ça je le savais, c'était pour montrer mon idée.
    Je garde votre code sous le coude, au cas où j'me rend compte que ma requête est foireuse niveau données.

    Sinon, mon SGBD, je l'avais précisé, en tout petit mais quand même, je travaille avec PGAdmin sur une base PostGre 9.1.2.

    Voilà, merci pour vos explications !

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

Discussions similaires

  1. update avec des données d'une autre table
    Par corto31 dans le forum Requêtes
    Réponses: 13
    Dernier message: 10/07/2008, 16h40
  2. UPDATE avec les données d'une autre table
    Par henri3m dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/10/2007, 12h09
  3. Réponses: 7
    Dernier message: 16/01/2007, 15h54

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