Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Invité de passage
    Homme Profil pro Stéphane
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Nom : Homme Stéphane

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut Requête pour récupérer un id qui apparaît plusieurs fois

    Bonjour à tous,

    Pour essayer d'être clair dans ma question, je préfère prendre un exemple concret.

    J'ai donc cette table dans ma base de données :



    Je cherche à récupérer les id_mission pour lesquels on à "Test 1" et "Test 4" dans la table. Ici, j'aimerais donc récupérer l'id_mission 1671 puisqu'il correspond à "Test 1" et "Test 4" mais pas l'id_mission 1674 car il ne correspond qu'à "Test 4"

    Je n'arrive pas à écrire la requête qui me permettrait d'avoir le résultat décrit ci-dessus.

    Merci par avance de votre aide.

    Stéphane,

  2. #2
    Membre Expert
    Homme Profil pro Olivier Dehorter
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    977
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Dehorter
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 977
    Points : 1 322
    Points
    1 322

    Par défaut

    Pour fournir une piste, il faut faire une auto-jointure, c'est à dire une jointure de la table sur elle-même

  3. #3
    Expert Confirmé
    Inscrit en
    août 2008
    Messages
    2 173
    Détails du profil
    Informations forums :
    Inscription : août 2008
    Messages : 2 173
    Points : 3 999
    Points
    3 999

    Par défaut

    Ou sans auto-jointure :
    Code :
    1
    2
    3
    4
    5
    select id_mission
      from t
     where nom in ('Test 1','Test 4')
     group by id_mission
    having count(distinct nom) = 2

  4. #4
    Invité de passage
    Homme Profil pro Stéphane
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Nom : Homme Stéphane

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Merci à tous les deux pour vos réponses.

    La solution de skuatamad a l'air de bien fonctionner.
    Pour ma culture personnelle, j'ai essayer d'écrire la requête avec une auto-jointure comme me l'a conseillé dehorter olivier.

    Ça donne la requête suivante :

    Code :
    1
    2
    3
    4
    5
     
    SELECT p1.id_mission 
    FROM planning_themes p1 
    INNER JOIN planning_themes p2 ON p1.nom = 'Test 1' AND p2.nom = 'Test 4'
    GROUP BY p1.id_mission
    La requête me renvoie bien l'id_mission voulu dans ce cas précis. Mais je me demande comment ça se passe si j'ai un troisième nom qui doit correspondre. Par exemple, retourner l'id_mission pour lequel j'ai les noms "Test 1", "Test 4" et "Test 6". Est-ce que je dois ajouter autant d'INNER JOIN que j'ai de noms recherchés.

    Quoi qu'il en soit, encore merci à vous pour vos réponses rapides et pertinentes

  5. #5
    Expert Confirmé Sénior
    Homme Profil pro
    Développeur Freelance
    Inscrit en
    janvier 2009
    Messages
    2 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Freelance

    Informations forums :
    Inscription : janvier 2009
    Messages : 2 341
    Points : 4 687
    Points
    4 687

    Par défaut

    Bonjour,
    Il manque une condition dans la jointure:
    Code SQL :
    1
    2
    3
    4
    5
     
    SELECT p1.id_mission 
    FROM planning_themes p1 
    INNER JOIN planning_themes p2 on p1.id_mission = p2.id_mission
    where p1.nom = 'Test 1' AND p2.nom = 'Test 4'

    De plus sans fonction d'aggregation le group by ne sert à rien.

    Tatayo.

  6. #6
    Invité de passage
    Homme Profil pro Stéphane
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Nom : Homme Stéphane

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    Merci pour tes précisions. C'est effectivement mieux comme ça.

  7. #7
    Expert Confirmé
    Inscrit en
    août 2008
    Messages
    2 173
    Détails du profil
    Informations forums :
    Inscription : août 2008
    Messages : 2 173
    Points : 3 999
    Points
    3 999

    Par défaut

    Citation Envoyé par Steph244211 Voir le message
    Est-ce que je dois ajouter autant d'INNER JOIN que j'ai de noms recherchés.
    Oui, ou avec la méthode du IN + HAVING, il faut juste que le nombre de nom recherché dans le IN corresponde au nombre dans le filtre HAVING.

  8. #8
    Invité de passage
    Homme Profil pro Stéphane
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Nom : Homme Stéphane

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 1
    Points
    1

    Par défaut

    D'accord, c'est bien noté. C'est bien ce que je pensais. Autant de jointures que de noms recherchés. Du coup j'ai appliqué ta méthode avec le IN + HAVING et ça fonctionne parfaitement.

    Merci encore de ton aide.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •