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 avec deux tables différentes


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 32
    Points
    32
    Par défaut update avec deux tables différentes
    bonjour, je travail sous sql server 2000, j'ai deux tables TABLE1 et TABLE2 elles ont toute les deux le champs niveau

    voici ce que je voudrais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if (select TABLE1.Niveau, TABLE2.Niveau 
    from TABLE1, TABLE2
    where "jointure ..."
    and TABLE1.NIveau < TABLE2.Niveau)
     
    begin
     
    update TABLE1
    set Niveau = (select Niveau from TABLE2)
    where Niveau = (select Niveau from TABLE1)
     
    end
    en gros c'est une mise a jour de mon niveau , mais il me marque toujour le meme message d'erreur :
    "La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression."
    pourtant je n'ai qu'une ligne d'affecté , est ce que vous auriez une idée ? , merci d'avance, bonne journée !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Il vous faut une colonne sur laquelle vous appuyer pour trouver les niveaux de TABLE2 correspondant à ceux de votre TABLE1. Une colonne id par exemple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE TABLE1
    SET Niveau = (SELECT Niveau 
                  FROM TABLE2
                  WHERE TABLE2.id = TABLE1.id
                  )
    Je ne sais pas si vous l'avez déjà fait, mais vous devriez prendre le temps de lire les tutos SQL à votre disposition, ça vous ferait gagner du temps.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il manque le where exists, sans lui toute la table1 sera mise à jour, avec niveau à null pour ceux qui n'existent pas dans table2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE TABLE1
    SET Niveau = (SELECT Niveau FROM TABLE2
                  WHERE TABLE2.id = TABLE1.id)
    WHERE EXISTS (select null FROM TABLE2
                  WHERE TABLE2.id = TABLE1.id)

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ou bien avec une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE TABLE1 t1
    INNER JOIN TABLE2 t2 ON t1.id = t2.id
    SET t1.Niveau = t2.Niveau
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 26
    Points : 32
    Points
    32
    Par défaut c'est bon
    merci beaucoup pour toutes ces informations, sa marche

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

Discussions similaires

  1. Calcul avec deux tables différentes
    Par challe dans le forum SAS Base
    Réponses: 3
    Dernier message: 11/07/2011, 15h30
  2. Update avec deux tables... syntaxe normalisée ?
    Par Yves Archambault dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/02/2009, 20h46
  3. Update avec deux tables
    Par pasbonte dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/01/2009, 22h01
  4. Réponses: 8
    Dernier message: 13/03/2006, 17h37

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