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 :

Mise à jour d'un attribut d'une table à partir d'une autre table


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 50
    Points
    50
    Par défaut Mise à jour d'un attribut d'une table à partir d'une autre table
    Bonjour, assez novice en SQL, je voudrais demander à l'un d'entre vous s'il pourrait me donner un coup de pouce.

    Explication de mon problème :

    Dans ma DB, j'ai une table 'ContactPerson' dont un des attributs (adresse mail) n'est pas systématiquement remplie mais cette adresse mail est toujours présente dans une autre table 'PhysicalPerson'.

    Je voudrais donc pouvoir mettre à jour la table 'ContactPerson' pour chacun des tuples où l'adresse mail n'est pas remplie à partir de la table 'PhysicalPerson' et ce sur base de deux attributs 'nom' et 'prénom' (aussi commun aux deux tables).

    J'ai vraiment du mal à voir cmt résonner pour mener à bien cette opération. (est-ce faisable en un requête ?)

    Je pense à une formule du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update ContactPerson set email = (select pp.mail from PhysicalPerson pp, ContactPerson cp where cp.firstname = pp.firstname and cp.name = pp.name)
    mais bon comme je vous dit je suis pas du tt spécialiste...

    Merci d'avance pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 126
    Points : 171
    Points
    171
    Par défaut
    Bonsoir,

    plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE ContactPerson cp
    SET email = 
    (SELECT pp.mail 
    FROM PhysicalPerson pp
    WHERE cp.firstname = pp.firstname AND cp.name = pp.name)
    where email is null
    Cdt

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Merci deadoralive,

    j'ai essayé ta proposition sans succès...

    voici le message d'erreur que sql server m'affiche :

    "Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <=, >, >= or when the subquery is used as an expression"

    anybody else ?!

  4. #4
    Membre chevronné

    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
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par vano
    "Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <=, >, >= or when the subquery is used as an expression"

    anybody else ?!
    Comprenez-vous le message d'erreur ?
    Je ne pense pas.
    Je ne sais pas si la requête proposée par deadoralive correspond à votre besoin mais il n'y a pas d'erreur de syntaxe.

    Le seul problème - remonté par ce message d'erreur - est qu'il existe au moins une ligne pour laquelle la sous-requête ramène plus d'une ligne.
    Or comme la sous-requête est liée à la requête principale par un symbol '=', cette configuration n'est pas permise.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Oui j'ai bien compris le message d'erreur...

    Le problème vient probablement du fait que, dans ma table ContactPerson, je peux avoir des tuples qui ont les mêmes valeurs pour les attributs noms et prénoms... ces deux champs ne constituent pas la clé primaire

    Je vais tenter d'expliquer mon problème par un petit exemple :

    Soit la table 'ContactPerson' suivante :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CP_ID   CP_NAME CP_FNAME     EMAIL                            CMD_NO
    ------- ---------  -----------  ------------------------   --------
    1          Dupont   Alain            NULL                                 1
    2          Durand   Aline            NULL                                 2
    3          Dubois    Celine          celine.dubois@dubois.be       3 
    4          Dupont    Alain           NULL                                 4
    et la table 'PhysicalPerson' (une vue dans mon cas - peu importe...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PP_ID   PP_NAME    PP_FNAME     EMAIL                            
    ------- ---------  -----------  ------------------------  
    1          Dubois      Celine          celine.dubois@dubois.be
    2          Dupont     Alain            alain.dupont@hotmail.com
    3          Durand     Aline            aline.durant@gmail.com

    Je voudrais mettre à jour l'attribut 'EMAIL' étant NULL de la table 'ContactPerson' sur base de la table 'PhysicalPerson' de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CP_ID   CP_NAME CP_FNAME     EMAIL                            CMD_NO
    ------- ---------  -----------  ------------------------   --------
    1          Dupont   Alain            alain.dupont@hotmail.com     1
    2          Durand   Aline            aline.durant@gmail.com         2
    3          Dubois    Celine          celine.dubois@dubois.be        3 
    4          Dupont    Alain           alain.dupont@hotmail.com     4
    Désolé pour la mise en page...

    Please help !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 50
    Points
    50
    Par défaut
    Mille excuses... la requête était correcte...

    Le problème venait du fait qu'il y avait des doublons dans la table 'PhysicalPerson' étant considérée comme 'référence' !!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2009, 16h44
  2. Réponses: 16
    Dernier message: 23/05/2008, 09h04
  3. Update d'une table à partir de deux autres tables
    Par Peewee766 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/05/2008, 19h08
  4. Réponses: 4
    Dernier message: 20/03/2007, 09h54
  5. creer une autre table à partir d'une requete
    Par papou34 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2007, 22h42

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