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 sub query


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut Update avec sub query
    Bonjour
    Me voici plongé dans un problème de sous requête que punkoff me propose de soumettre ici en tant que sujet seul

    Je résume:
    je dois mettre a jour les données d'une table avec des données en provenance d'une autre table et la relation entre les deux tables est sur une seule clé..
    je veux donc dans une table mettre à jour pour chaque(tous) "record" la donnée "effectif " avec la donnée nb_obj de la table source

    Voici la requête que je soumets au moteur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    update nrj_pssens Set effectif =
                          (Select t2.nb_obj
                           from  nrj_pssens t1, ene_obj t2
                           where t1.cle_pat = t2.clepat)
    dans cette requête le champ de relation est Cle_pat dans T1 ou clepat dans t2...

    à l'exécution de la requête le système me répond :
    "single row subquery returns more than one row"

    quelqu'un sait-il comment m'en sortir en une requête ou un script

    merci de me lire
    Ailleurs Punkoff me dit
    vous ne faites aucune jointure entre votre table à updater et votre sousrequete, du coup vous avez ce message d'erreur.
    ben ma jointure je pensais l'avoir posée dans le "where"

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    dans votre sous-requete vous joingnez effectivement 2 tables, mais pas celle concernée par l'update vu que vous n'y faites aucune référence

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je confirme que je ne vois pas de jointure entre la table nrj_pssens (qui est dans l'update) et la sous-requête.
    Il faudrait une requête du genre:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    update nrj_pssens Set effectif =
    (Select t2.nb_obj
    from ene_obj t2
    where nrj_pssens.cle_pat = t2.clepat)

    Je doute que la syntaxe soit correcte, mais c'est l'idée

    Tatayo.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Ou comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE  nrj_pssens  t1
    SET     effectif =
              (   SELECT  t2.nb_obj
                  FROM    ene_obj t2
                  WHERE   t1.cle_pat = t2.clepat
              )
    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.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Sans doute, mais si la sous-requête sélectionne plusieurs données, ça va planter l'UPDATE

    Il faut être sûr que cette sous-requête ne renvoie qu'une ligne
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par dehorter olivier Voir le message
    Sans doute, mais si la sous-requête sélectionne plusieurs données, ça va planter l'UPDATE

    Il faut être sûr que cette sous-requête ne renvoie qu'une ligne
    a ce sujet je suis rassuré.. ce sont deux tables sans doublons

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    faites attention tout de même si la cardinalité niveau mcd est une relation n,n.

    vous pourriez avori des valeurs null comme résultat si aucune occurence n'est trouvée dans la table ene_obj

  8. #8
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 789
    Points
    30 789
    Par défaut
    En effet, il vaut mieux ajouter un contrôle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE  nrj_pssens  t1
    SET     effectif =
                (   SELECT  t2.nb_obj
                    FROM    ene_obj t2
                    WHERE   t1.cle_pat = t2.clepat
                )
    WHERE   EXISTS
                (   SELECT  1
                    FROM    ene_obj t3
                    WHERE   t1.cle_pat = t3.clepat
                )
    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. [MySQL-5.0] creation de view avec sub query
    Par zizou1989 dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/05/2013, 23h39
  2. Construire un query d'update avec delphi
    Par naw dans le forum Bases de données
    Réponses: 2
    Dernier message: 06/07/2004, 13h12
  3. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 17h19
  4. Connection avec MS Query (Excel) via ODBC MySQL
    Par javigle dans le forum Installation
    Réponses: 7
    Dernier message: 23/11/2003, 21h03
  5. Pb Update avec chaine de caractere
    Par JuJu° dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2003, 15h58

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