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] Mettre à jour plusieurs Elements d'une table par rapport à une autre


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Inscrit en
    Février 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 148
    Par défaut [Update] Mettre à jour plusieurs Elements d'une table par rapport à une autre
    Bonjour,

    J'ai une table de référence tab1 et je voudrais mettre à jour toute la table tab2 par rapport aux références de tab1

    J'ai fais cela mais j'ai une erreur

    UPDATE Tab2 d
    Set d.COMP=(SELECT C.LIB FROM tab1 C where C.COMP=d.COMP)

    Merci pour votre aide

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    1°/ quel est votre SGBD et sa version (merci de lire et de respecter les règles du forum)
    2°/ merci d'utiliser les balises de mise en forme notamment celle de [CODE]
    3°/ quelle est votre erreur (perso je ne suis pas devin)
    4°/ votre syntaxe n'est pas conforme vis-à-vis de la norme SQL (pas d'alias sur la table à mettre à jour)
    5°/ si jamais votre erreur signale que votre sous-requête ramène plus d'un enregistrement alors il vous manque probablement une clause dans les filtres de la sous-requête...

  3. #3
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Tu es sur que tu ne mélanges pas tes champs ?

    Ca me parait bizard que tu veuilles mettre la valeur de d.COMP à C.LIB après avoir comparé C.COMP et d.COMP.

    Et peux tu nous donner l'intitulé de l'erreur que tu obtiens ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    J'ai un problème semblable avec Postgresql, je désire updater le champs cleproprio dans la table lot_projete pour cleproprio de lot_occupe. Dois-je avoir recours au PLSQL pour faire ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE lot_projete
        SET cleproprio = (SELECT occ.cleproprio
    		          FROM lot_occupe occ, lot_projete pro
    		          WHERE occ.idnouvlot = pro.idnouvlot)
    ERROR: more than one row returned by a subquery used as an expression

    Merci.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Le message d'erreur est clair, non ?

    De plus, dans la sous-requête vous répétez le nom de la table que vous souhaitez mettre donc il y a fortes chances pour que ça ne produise pas l'effet souhaité.

    Ceci dit, dans votre cas, hormis en utilisant un alias sur la table à mettre à jour je ne vois pas vraiment comment s'en sortir tout en restant conforme vis-à-vis de la norme SQL.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    Nevermind. j'ai trouvé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE lot_projete
       SET cleproprio=lot_occupe.cleproprio
          WHERE lot_projete.idnouvlot = lot_occupe.idnouvlot

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    Cette syntaxe est hallucinante, vous ne précisez dans aucune clause UPDATE ou FROM (cas d'une sous-requête) que vous utilisez des données de la table lot_occupe.

    Je n'ai pas des années d'expériences mais cette requête vous donnera certainement des résultats sureprenants voire des erreurs (ce qui me semble plus logique).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    Peut-être mais ça fonctionne #1

Discussions similaires

  1. [AC-2002] Updater une table par rapport à une autre
    Par thierryakaguy dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 29/07/2009, 17h48
  2. Mettre à jour une table par rapport à une autre
    Par remsrock dans le forum Développement
    Réponses: 2
    Dernier message: 18/11/2008, 12h22
  3. Réponses: 16
    Dernier message: 19/02/2008, 14h10
  4. Réponses: 1
    Dernier message: 01/08/2006, 14h43
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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