Précédent   Forum du club des développeurs et IT Pro > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/12/2012, 18h14   #1
Steph244211
Invité de passage
 
Homme Stéphane
Développeur informatique
Inscription : 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,
Steph244211 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 18h19   #2
dehorter olivier
Membre Expert
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 920
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 : 920
Points : 1 240
Points : 1 240
Pour fournir une piste, il faut faire une auto-jointure, c'est à dire une jointure de la table sur elle-même
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 18h41   #3
skuatamad
Expert Confirmé
 
Inscription : août 2008
Messages : 1 690
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 690
Points : 2 812
Points : 2 812
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
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/12/2012, 09h29   #4
Steph244211
Invité de passage
 
Homme Stéphane
Développeur informatique
Inscription : 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
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
Steph244211 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 09h58   #5
tatayo
Expert Confirmé
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 549
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 549
Points : 3 094
Points : 3 094
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.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 10h57   #6
Steph244211
Invité de passage
 
Homme Stéphane
Développeur informatique
Inscription : 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
Merci pour tes précisions. C'est effectivement mieux comme ça.
Steph244211 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 11h21   #7
skuatamad
Expert Confirmé
 
Inscription : août 2008
Messages : 1 690
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 690
Points : 2 812
Points : 2 812
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.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2012, 11h26   #8
Steph244211
Invité de passage
 
Homme Stéphane
Développeur informatique
Inscription : 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
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.
Steph244211 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h01.


 
 
 
 
Partenaires

Hébergement Web