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 :

Requete Update avec sous requete


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 61
    Points
    61
    Par défaut Requete Update avec sous requete
    Bonjour à tous!

    Voici mon soucis.
    J'ai une table toto qui contient entre autre 2 colonnes : la premiere no_utilisateur, et la seconde nom_utilisateur. (ce ne sont pas les clés de ma premiere table)
    A coté, j'ai une table tata qui contient uniquement les infos concernant les utilisateurs, donc je retrouve mon cle_utilisateur et mon nom_utilisateur.

    Dans la table toto, le champ no_utilisateur n'est pas toujours renseigné.
    Je comptais donc faire une requete du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    update toto 
       set no_utilisateur = (select cle_utilisateur 
                               from toto,tata 
                              where tata.cle_utilisateur=toto.no_utilisateur 
                                 and ....)
    Le probleme est que ma sous requete me renvoie plus d'une ligne...
    Je ne sais pas comment faire en sorte de mettre a jour ma table ligne par ligne

    Merci pour votre aide

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut,

    Merci de tenir compte des CONSEILS... à lire AVANT de POSTER SVP,

    D'abord, pose-toi la question : Si ta sous-requête ramène plusieurs lignes, est-ce normal ?

    - Si non, dédoublonne ta table (cf Les doublons) et met en place des contraintes d'intégrités qui t'empêchetont de te retrouver dans cette situation.

    - Si oui, à toi de construire la clause WHERE de ta sous-requête de sorte qu'elle ne te retourne qu'une seule ligne : la bonne !

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 61
    Points
    61
    Par défaut
    Désolé de ne pas avoir identé ma requete.

    Je suis d'accord que pour que mon update fonctionne, il faut que ma sous requete ne renvoie qu'une seule ligne, seulement, j'ai un petit paquet de lignes à mettre à jour, et je cherche donc une maniere de le faire d'un seul coup ... plutot que de passer ligne par ligne

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par Xo
    Merci de tenir compte des CONSEILS... à lire AVANT de POSTER SVP,
    Quel SGBD utilises-tu ? Il existe divers moyens de ne ramener qu'une seule ligne de manière arbitraire, mais chaque SGBD implémente ses solutions : LIMIT, TOP, ROWNUM, etc.

  5. #5
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bonjour,

    C'est du grand n'importe quoi !
    Comment veux-tu mettre à jour un champ d'une table (champ annoncé comme vide) en faisant un lien via ce même champ (alors qu'il est vide) sur une autre table.
    C'est du grand n'importe quoi !

    Donnes nous quelques précisions ou relie toi.

    a+

  6. #6
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par Yurck
    C'est du grand n'importe quoi !
    [...]
    C'est du grand n'importe quoi !
    Restons calme SVP, joziel a du mélanger un champ ou 2 en recopiant sa requête, c'est sympa de le souligner, pas la peine de s'emballer ...

    En l'occurence, si les clés sont renseignées, et pas les noms, la requête serait alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update toto 
       set nom_utilisateur = (select tata.nom_utilisateur 
                               from toto, tata 
                              where tata.cle_utilisateur = toto.no_utilisateur 
                                 and ....)

  7. #7
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Bonjour,

    Certes, certes.

    je propose alors cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update toto
       set nom_utilisateur = (select first tata.nom_utilisateur
                               from tata
                              where tata.cle_utilisateur = toto.no_utilisateur)
      where (toto.nom_utilisateur is null) or (toto.nom_utilisateur ='')
    bien que je sois dubitatif sur l'intérêt du First.

    a+

  8. #8
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 61
    Points
    61
    Par défaut
    Bonjour,

    Je me suis effectivement trompé sur ma jointure, je la fais sur le nom de l'utilisateur (en considérant bien sur qu'il n'y en a pas 2 identiques).

    En tout cas, la requete sans le first fonctionne très bien!
    Merci bcp

    Bonne journée

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

Discussions similaires

  1. [Toutes versions] Requete UPDATE avec sous-requete imbriquée
    Par LVELVE dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 09/06/2020, 19h24
  2. Requete update avec sous requete et max en jointure
    Par youyoupapayou dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/08/2009, 16h19
  3. MySQL: Probleme d'UPDATE avec sous requete SELECT
    Par simonius dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/11/2007, 14h57
  4. Requete Update avec sous requete et jointure
    Par javaboy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/05/2007, 11h03
  5. problème update avec sous requetes
    Par stoz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 12/10/2005, 16h44

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