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 :

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


Sujet :

Langage SQL

  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 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    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 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    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 sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    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 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    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, 13h49
  2. [MySQL] Un seul bloc de requêtes pour récupérer et modifier le même champ
    Par Alexandrebox dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 17/04/2007, 12h13
  3. Réponses: 11
    Dernier message: 30/10/2006, 16h59
  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, 13h11
  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, 16h09

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