Bonjour à tous.

J'ai plusieurs tables :
  • prestataire : id_prestataire, nom
  • region : id_region, region
  • liaison_prestataire_region : id_prestataire, id_region
  • liaison_prestataire_competence : id_prestataire, id_competence, id_type_competence
  • type_projet_materiel : id_type_projet_materiel, type_projet_materiel
  • type_projet_software : id_type_projet_software, type_projet_software


Dans liaison_prestataire_competence, si id_type_competence = 1, alors id_competence = id_type_projet_materiel, et si id_type_competence = 2, alors id_competence = id_type_projet_software.

Je cherche, avec une seule requête, à récupérer les informations du prestataire, des régions et des compétences.

Voici la requête que j'ai écrite :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
SELECT p.id_prestataire, p.nom, 
	GROUP_CONCAT(r.region SEPARATOR ', ') as regions, 
	GROUP_CONCAT(r.id_region SEPARATOR ',') as idsRegions, 
	GROUP_CONCAT(com.id_competence SEPARATOR ',') AS idsCompetence,
	GROUP_CONCAT(com.id_type_competence SEPARATOR ',') AS idsTypeCompetence
 
FROM liaison_prestataire_region lpr
INNER JOIN region r ON r.id_region = lpr.id_region 
INNER JOIN prestataire p ON p.id_prestataire = lpr.id_prestataire
 
INNER JOIN liaison_prestataire_competence lpc ON lpc.id_prestataire = p.id_prestataire
 
INNER JOIN(
	SELECT id_type_projet_materiel AS id_competence, 1 AS id_type_competence, GROUP_CONCAT(type_projet_materiel SEPARATOR ',') AS competence
	FROM type_projet_materiel tpm
	GROUP BY id_competence, id_type_competence
	UNION
	SELECT id_type_projet_software AS id_competence, 2 AS id_type_competence, GROUP_CONCAT(type_projet_software SEPARATOR ',') AS competence
	FROM type_projet_software tps
	GROUP BY id_competence, id_type_competence
) AS com
ON com.id_competence = lpc.id_competence
AND com.id_type_competence = lpc.id_type_competence            
 
GROUP BY p.id_prestataire, p.nom
Mais le résultat n'est pas concluant, les informations concernant les régions et les compétences sont doublé voir quadruplé.

Voici ce que j'obtiens :

Nom : sql_faux.PNG
Affichages : 198
Taille : 7,4 Ko

Et voici ce que j'aimerai obtenir:

Nom : sql_juste.PNG
Affichages : 192
Taille : 6,4 Ko


Que dois-je modifier dans ma requête afin d'avoir le résultat voulu ?

Merci d'avance pour votre aide.