Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/05/2011, 09h38   #1
Invité de passage
 
Inscription : décembre 2008
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 10
Points : 3
Points : 3
Par défaut Aide pour une requête

Bonjour,


Je viens de débuter SQL et pour la recherche que j’effectue je développe une base de donnée avec MySQL. Les tables actuellement sont les suivantes :
Travaux : idtravaux, ...
Compétence : idcompetence, nomcompetence
Typeemploye : idemploye,…

Table d’interrelation
Travcomp : idtravaux, idcompetence (de une à plusieurs lignes en fonction du nombre de compétence exigé par le travail a effectué)
Typeempcomp : idemploye, idcompetence (de une à plusieurs lignes en fonction du nombre de compétence du type d’employé envisagé)

J’aimerais faire une requête pour déterminer la liste du typeemploye pour un travail particulier, la liste du typeemploye devra avoir au minimum toutes les compétence (ou plus) pour effectué le travail
Requête testée :
Code :
1
2
3
4
5
6
SELECT DISTINCT idemploye
FROM Typeempcomp 
WHERE  idcompetence IN 
(SELECT idcompetence 
FROM Travcomp 
WHERE idtravaux =1)
Est-ce possible de réaliser ce genre de requête avec la structure de table crées ou bien dois-je revoir la structure de mes tables ?

En vous remerciant d’avance pour votre aide
cullrich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 10h16   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
La encore, je pense qu'il vous faudra passer par des fonction d'aggrégat (count + having).

genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
	a.idemploye
FROM	
	Typeempcom a INNER JOIN Travcomp b ON (a.idcompetence=b.idcompetence)
WHERE
	b.id_travaux=1	
GROUP BY 
	a.idemploye, b.idtravaux
HAVING
	COUNT(1)  = ( /* Nbre de compétences acquises pour le travail demandé*/
SELECT                  
			COUNT(1) /* Nbre de competences obligatoires*/
		     FROM	
			Travcomp
		     WHERE
			idtravaux=1)
a tester et a adapter
Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/05/2011, 15h33   #3
Invité de passage
 
Inscription : décembre 2008
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 10
Points : 3
Points : 3
Merci beaucoup pour l'astuce en adaptant un tout petit peu ça donne ce qu'il me faut voici le code final

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
	a.idemploye
FROM	
	Typeempcom a INNER JOIN Travcomp b ON (a.idcompetence=b.idcompetence)
WHERE
	b.id_travaux=1	
GROUP BY 
	a.idemploye
HAVING
	COUNT(idemploye)  = ( 
SELECT                  
			COUNT(idcompetence) 
		     FROM	
			Travcomp
		     WHERE
			idtravaux=1)
cullrich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2011, 15h47   #4
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Tant mieux si cela vous a aidé

Pensez au bouton
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h37.


 
 
 
 
Partenaires

Hébergement Web