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

 MySQL Discussion :

Select multiple + autre condition


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Par défaut Select multiple + autre condition
    Bonjour,

    Ma demande est très simple, c'est juste que ca fait longtemps que je ne touche plus de sql et que je me retrouve un peu perdu pour un rien.

    Voici la table en question:

    ----------------
    table_test
    ----------------
    id_a
    id_b
    ----------------

    Voici quelques tuples présents dans cette table:
    1-301
    1-303
    1-229
    1-609
    1-708
    2-301
    2-609
    3-766
    3-555
    3-301
    3-909
    3-123
    3-777

    J'aimerai trouver la requete qui me permet de trouver tous les id_a tel que ses id_b contiennent au moins les valeurs 301 et 609.
    Ici il devrait me retourner l'id 1 et 2 mais pas le 3 car il ne contient que l'id_b de valeur 301.

    J'avais fait ceci mais ca ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT id_a
    FROM table_test
    WHERE id_b =301 
    AND 609
    C'est simple mais je bloque *honte*

    Merci pour votre aide...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Cette requête marchera s'il n'existe pas de doublon de couple id_a,id_b dans table_test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select id_a 
    from table_test 
    where id_b in (301,609) 
    group by id_a 
    having count(*) =2
    Sinon, il faut faire une jointure entre table_test et elle-même.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Par défaut
    Merci pour ta réponse =)

    En effet les couples id_a et id_b sont uniques.

    Une toute derniere question et je serai comblé !

    Voila en fait j'aimerai rajouter une condition...

    En fait la vrais requete serait:

    Trouver tous les id_a tel que ses id_b contiennent au moins les valeurs 301 et 609 et au moins une de ces trois valeurs: 303 ou 229 ou 708 .
    Ca devrait me retourner id_a = 1

    Voila si j'ai la réponse à ca je serait comblé !!!!

    Merci beaucoup pour l'aide précieuse

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT t1.id_a
    FROM table_test t1
    INNER JOIN
    (
        SELECT id_a 
        FROM table_test 
        WHERE id_b IN (301,609) 
        GROUP BY id_a 
        HAVING count(*) =2
    ) tmp ON tmp.id_a = t1.id_a
    WHERE t1.id_b IN (229, 303, 708)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Par défaut
    Merci beaucoup !!! Vraiment génial


    Par contre avant de mettre en résolu, c'est juste que j'aimerai savoir a titre personnel si je fais ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT t1.id_a
    FROM table_test t1
    INNER JOIN
    (
        SELECT id_a 
        FROM table_test 
        WHERE id_b IN (301,609) 
        GROUP BY id_a 
        HAVING count(*) =2
    ) tmp ON tmp.id_a = t1.id_a
    WHERE t1.id_b IN (229 | 303 | 708)
    Cela signifie t-il bien la requete suivante ?:

    Je cherche tous les id_a tel que ses id_b contiennent au moins les valeurs 301 et 609 et SEULEMENT une de ces trois valeurs: 303 ou 229 ou 708 .

    C'est bien ca ?

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Non, il faut faire un nouveau regroupement et un comptage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT DISTINCT t1.id_a
    FROM table_test t1
    INNER JOIN
    (
        SELECT id_a 
        FROM table_test 
        WHERE id_b IN (301,609) 
        GROUP BY id_a 
        HAVING count(*) =2
    ) tmp ON tmp.id_a = t1.id_a
    WHERE t1.id_b IN (229, 303, 708)
    GROUP BY t1.id_a
    HAVING COUNT(*) = 1
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

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

Discussions similaires

  1. [MySQL] requete select multiple condition
    Par totot dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 22/01/2014, 21h19
  2. select avec autre select en condition
    Par ifsera dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/11/2012, 22h23
  3. Select multiple
    Par lfournial dans le forum Struts 1
    Réponses: 20
    Dernier message: 24/02/2011, 12h14
  4. Réponses: 2
    Dernier message: 08/01/2007, 20h26
  5. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16

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