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

Requêtes MySQL Discussion :

Problème requête SQL avec plusieurs lignes retournées dans le where


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut Problème requête SQL avec plusieurs lignes retournées dans le where
    Bonjour à tous,

    Le titre de mon message n'est surement pas très compréhensible je vais essayer d'être plus clair.

    J'ai deux tables:
    OBJET avec comme champs
    id, id_host, _id_type, value
    Et une autre TYPE avec comme champs
    id, description

    le id_type de OBJET me permet de savoir quelle type d'info j'ai avec le champs id de la table TYPE.
    TYPE.id = OBJET.id_type

    Ma table OBJET a ce genre d'infos:
    id id_host id_type value
    1 1 1 nie641e
    2 1 2 106A0082
    3 1 3 80gff3c3
    4 1 4 Sun Microsystems sun4u Sun Enterprise 220R
    5 1 5 OBP 3.31.0 2001/07/25 20:31
    7 1 6 1024MB
    8 1 7 2
    9 1 8 2/450MHz

    Je voudrais par exemple récupérer toutes les infos de chaque id_host ayant comme id_type = 4 et comme valeur "Sun Microsystems".

    voici ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select a.value, b.description from objet a, type b
    where
    id_host = (select c.id_host from objet c where c.value like '%nie641e%')
    and a.id_type = b.id
    La ca marche car ma requete entre parenthese renvoit qu'un seul id_host correspondant à 'nie641e'. Mais si je mets entre guillemets 'Sun Microsystems' comme y en a plusieurs ayant cette valeur elle renvoit plusieurs id_host et donc ca coince... Ce que je comprends tout à fait mais alors comment faire une moulinette qui pourrait me faire la requete pour chaque id_host retourner dans la requete entre parenthèse?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    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 681
    Points : 33 739
    Points
    33 739
    Billets dans le blog
    14
    Par défaut
    Je voudrais par exemple récupérer toutes les infos de chaque id_host ayant comme id_type = 4 et comme valeur "Sun Microsystems".
    Ta phrase est ambigüe.
    Dans tes données il n'y a qu'un seul id_host et une ligne de ces données correspond au besoin. Ne faut-il retourner que cette ligne ou toutes les lignes de id_host = 1 puisque l'une des lignes de ses données répond au critère ?

    Que vient faire ta sous requête avec son like par rapport au besoin que tu exprimes ?

    Tu peux donner le résultat attendu par rapport aux données exemple fournies ?
    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 !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut
    Tout d'abord merci pour ta réponse

    En fait, par exemple ma sous requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (SELECT c.id_host FROM objet c WHERE c.value LIKE '%nie641e%')
    Dans ce cas retourne:
    id_host
    5

    Mais j'ai des cas (la majorité) ou cette requête va me retourner plusieurs id_host:
    id_host
    5
    16
    23
    180

    Donc j'ai une erreur "Subquery returns more than 1 row" ce qui normal.
    Mais je voudrais pour chaque id_host retourner de la sous requête effectuer la premiere partie de la requête. En gros ca donnerait ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT a.value, b.description FROM objet a, type b
    WHERE id_host = 5 and a.id_type = b.id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT a.value, b.description FROM objet a, type b
    WHERE id_host = 16 and a.id_type = b.id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT a.value, b.description FROM objet a, type b
    WHERE id_host = 23 and a.id_type = b.id
    etc...

    Comme ca pour chaque id_host récupéré de la sous requête je récupère les infos Enfin j'aimerais bien...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2009
    Messages : 67
    Points : 83
    Points
    83
    Par défaut
    Citation Envoyé par Tonii Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select a.value, b.description from objet a, type b
    where
    id_host = (select c.id_host from objet c where c.value like '%nie641e%')
    and a.id_type = b.id
    Dans le cas où ta sous-requête retourne plusieurs enregistrements, il faut utiliser l'opérateur IN plutôt que "="... Ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select a.value, b.description from objet a, type b
    where
    id_host IN (select c.id_host from objet c where c.value like '%nie641e%')
    and a.id_type = b.id
    Cela risque d'être un poil mieux...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    novembre 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : novembre 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut
    Merci c'est exactement ca!!!

    Merci encore, j'ai beaucoup à apprendre!

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

Discussions similaires

  1. Problème requête sql avec plusieurs jointures
    Par CocoX02 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/02/2015, 14h33
  2. Réponses: 3
    Dernier message: 23/01/2012, 15h13
  3. Réponses: 0
    Dernier message: 01/03/2009, 15h44
  4. requête SQL avec plusieurs critères de sélection
    Par gailup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/06/2007, 09h44
  5. erreur de requête SQL avec ASP mais pas dans Access
    Par csszzen dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/03/2007, 10h07

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