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

Débutez Discussion :

Mise à jour d'une table avec jointure


Sujet :

Débutez

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Mise à jour d'une table avec jointure
    Bonjour,
    je débute avec sas mais j'ai des connaissances en sql.
    j'ai deux tables A et B et je souhaite mettre à jour la colonne1 de la table A avec les valeurs correspondantes de la colonne1 la table B en utilisant une clé de jointure ID et une condition dans la table B, voilà ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc sql;
    update A
    set colonne1=(select colonne1 from B where B.ID=A.ID and B.colonne2="valeur");
    run;
    et oops!! j'ai le message suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR: Sous-requête évaluée à plus d'une ligne.
    quelq'un peut m'aider?

  2. #2
    Membre actif Avatar de tdiallo
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mai 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2012
    Messages : 118
    Points : 264
    Points
    264
    Par défaut
    Slt,
    tu peux essayer ça mais j'ai pas testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc sql;
    update A
    set colonne1=colonne1;
    select *
    	from B left join A 
    	on B.ID=A.ID
    	where B.colonne2="valeur"
    	;
    quit;
    Bon courage .

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par tdiallo Voir le message
    Slt,
    tu peux essayer ça mais j'ai pas testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc sql;
    update A
    set colonne1=colonne1;
    select *
    	from B left join A 
    	on B.ID=A.ID
    	where B.colonne2="valeur"
    	;
    quit;
    Bon courage .

    non ça n'a pas marché:
    là tu proposes deux requêtes séparées:

    la première est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update A
    set colonne1=colonne1;
    et la deuxième est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select *
    	from B left join A 
    	on B.ID=A.ID
    	where B.colonne2="valeur"
    	;
    quit;
    je vois pas vraiment la liaison

  4. #4
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    Ta syntaxe est bonne, tu est sure d'avoir des clés uniques ? (si la sous requête retourne plusieurs lignes, la jointure ne peut pas se faire)
    De plus, j'aurais ajouté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PROC SQL;
    	UPDATE A
    	SET colonne1 = (SELECT colonne1 FROM B WHERE B.ID=A.ID and B.colonne2="valeur")
    	WHERE EXISTS (SELECT * FROM B WHERE B.ID=A.ID and B.colonne2="valeur");
    QUIT;

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 114
    Points : 158
    Points
    158
    Par défaut update avec jointure
    Bonjour,

    L'erreur vient du fait qu'il y'a des correspondances mulitples dans la ta jointure.
    Vérifie bien que tu n'essaye pas de mettre à jour plusieurs lignes dans B pour un 1 ligne dans A

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/04/2008, 09h54
  2. Mise à jour d'une table avec une autre
    Par julie75 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 12/10/2007, 18h54
  3. Mise à jour d'une table avec une autre
    Par Oilcout dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 04/10/2007, 13h02
  4. Mise à jour d'une table avec une autre
    Par Lucien dans le forum SQL
    Réponses: 2
    Dernier message: 20/04/2006, 10h46
  5. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46

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