1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

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

    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 expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    juin 2003
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : juin 2003
    Messages : 1 091
    Points : 1 503
    Points
    1 503

    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
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    août 2008
    Messages
    2 439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 2 439
    Points : 4 686
    Points
    4 686

    Par défaut

    Ou sans auto-jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

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

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 éminent
    Homme Profil pro
    Développeur Freelance
    Inscrit en
    janvier 2009
    Messages
    2 984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Freelance

    Informations forums :
    Inscription : janvier 2009
    Messages : 2 984
    Points : 6 100
    Points
    6 100

    Par défaut

    Bonjour,
    Il manque une condition dans la jointure:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

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

    Par défaut

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

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    août 2008
    Messages
    2 439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2008
    Messages : 2 439
    Points : 4 686
    Points
    4 686

    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
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

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

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

    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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/06/2012, 14h49
  2. Réponses: 8
    Dernier message: 17/04/2007, 13h13
  3. Réponses: 11
    Dernier message: 30/10/2006, 17h59
  4. [VBA-E]Methode pour trouver une valeur qui apparait plusieur fois
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2006, 14h11
  5. Requête pour récupérer le nom des champs
    Par legillou dans le forum JDBC
    Réponses: 1
    Dernier message: 08/02/2006, 17h09

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