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 :

Mettre à jours champs depuis une autre table


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut Mettre à jours champs depuis une autre table
    Bonjour tout le monde

    Voila depuis ce matin je bloque sur un truc qui peut vous paraitre tout con
    Je m'explique

    j'ai une table t1 de type suivant
    id , nom, prenom, mail ,.......

    une autre table t2 de type
    nom , prenom , mail,...... (donc sans id)

    mon but c'est de remplir les null dans la colonne mail de t1 avec la table t2.
    N'ayant pas d'id je fais une jointure avec nom et prenom.

    J'ai une requête du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE t1
            SET EMAIL = (select EMAIL
            from t2
    where t1.NOM = t2.NOM
    and t1.PRENOM = t2.PRENOM
    and t1.EMAIL is null);
    La requête s’exécute

    Problème au lieu de me rajouter des emails la requête me supprime presque tout
    avant dans t1 j'avais 648 mails
    après la requête j'ai plus que 3 mails :/


    Help svp

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    rajoutez une clause where a votre update.

    La si la requete n'arrive pas a faire la jointure la colonne mail sera automatiquement alimentée a null

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2014
    Messages : 23
    Par défaut
    Bonjour,

    Ca peut ressembler à cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE tb1
    SET tb1.email = tb2.email
    FROM Table1 AS tb1
    INNER JOIN Table2 AS tb2
    	ON tb1.nom = tb2.nom
    	AND tb1.prenom = tb2.prenom
    WHERE
    	tb1.email IS NULL

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut
    Merci de vos réponse

    Citation Envoyé par punkoff Voir le message
    bonjour,

    rajoutez une clause where a votre update.

    La si la requete n'arrive pas a faire la jointure la colonne mail sera automatiquement alimentée a null
    une clause where a la fin mais pour y mettre quoi ? je ne vois pas :/

    Citation Envoyé par Niklosus Voir le message
    Bonjour,

    Ca peut ressembler à cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE tb1
    SET tb1.email = tb2.email
    FROM Table1 AS tb1
    INNER JOIN Table2 AS tb2
    	ON tb1.nom = tb2.nom
    	AND tb1.prenom = tb2.prenom
    WHERE
    	tb1.email IS NULL
    Ce code me renvoie une erreur "SQL command not properly ended"


    chose que j'ai oublié de preciser
    nom,prenom dans t1 ne se trouve pas forcément dans t2 et vice versa

  5. #5
    Membre expérimenté
    Avatar de diablo-dz
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 75
    Par défaut
    bonsoir
    tu peux nous dire c'est quoi ton SGBD

    Bonsoir Niklosus
    la requête qu'a proposer Niklosus marcher très bien sur sql server
    A+

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 7
    Par défaut
    Citation Envoyé par diablo-dz Voir le message
    bonsoir
    tu peux nous dire c'est quoi ton SGBD

    Bonsoir Niklosus
    la requête qu'a proposer Niklosus marcher très bien sur sql server
    A+
    Je suis sous oracle xe 11g

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    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 135
    Par défaut
    La requête proposée par Niklosus fonctionne peut-être sur SQL Serveur, mais cette syntaxe n'est pas conforme à la norme SQL.
    Celle-ci a plus de chances d'être comprise par tous les SGBD :
    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
    UPDATE  t1
      SET   email = 
            (   SELECT  email
                FROM    t2
                WHERE   t1.nom      = t2.nom
                    AND t1.prenom   = t2.prenom
                    AND t1.email    IS NULL
            )
    WHERE   EXISTS 
            (   SELECT  NULL
                FROM    t2
                WHERE   t1.nom      = t2.nom
                    AND t1.prenom   = t2.prenom
                    AND t1.email    IS NULL
            )
    ;
    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.

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

Discussions similaires

  1. mettre à jour à partir d'une autre table
    Par xavier_dcf dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/12/2012, 21h24
  2. [AC-2007] table liés, insertion de champs depuis une autre table
    Par moumouss dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2009, 11h44
  3. Réponses: 3
    Dernier message: 06/09/2008, 06h51
  4. Réponses: 13
    Dernier message: 14/04/2008, 14h30
  5. Réponses: 6
    Dernier message: 25/07/2007, 10h43

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