2010-11-24 14 views
0

Disons que j'ai trois tables:MySQL se rejoignent pour récupérer les ID distincts liés d'une autre table

EMPLACEMENTS - un magasin peut appartenir à plusieurs endroits et un emplacement peut avoir plusieurs magasins

 
+-------------+----------+ 
| LOCATION_ID | STORE_ID | 
+-------------+----------+ 

MAGASINS - une seule rangée par magasin, chaque magasin n'a qu'un seul ID de gestionnaire

 
+----------+------------+ 
| STORE_ID | MANAGER_ID | 
+----------+------------+ 

EMPLOYÉS - un gestionnaire peut avoir plusieurs employés, et les employés peuvent appartenir à plus d'un gestionnaire

 
+-------------+-------------+ 
| MANAGER_ID | EMPLOYEE_ID | 
+-------------+-------------+ 

Et pour un endroit donné (par exemple LOCATION_ID = 999), je veux que tous les employés soient gérés dans les magasins à cet endroit.

Cela me obtient la liste des gestionnaires qui appartiennent à des magasins à cet endroit:

SELECT s.MANAGER_ID FROM LOCATIONS l 
    INNER JOIN STORES s 
    ON s.STORE_ID = l.STORE_ID 
    WHERE l.LOCATION_ID = 999; 

Ce que je veux réellement est TOUS les EMPLOYEE_IDs distincts qui sont liés aux gestionnaires cette requête recrache.

Quelle jointure supplémentaire puis-je ajouter dans la même requête pour l'obtenir?

Répondre

2
SELECT DISTINCT E.EMPLOYEE_ID 
FROM LOCATIONS L 
INNER JOIN STORES S ON S.STORE_ID = L.STORE_ID 
INNER JOIN EMPLOYEES E ON S.MANAGER_ID = E.MANAGER_ID 
WHERE L.LOCATION_ID = 999; 
+0

Bizarre, je pensais avoir essayé exactement la même chose mais elle ne m'a retourné qu'un EMPLOYEE_ID par MANAGER, clairement que j'ai raté quelque chose. Merci! – NChase

0

Ajout de INNER JOIN Employees e ON s.MANAGER_ID = e.MANAGER_ID devrait vous aider les employés.

Mais je remarque que vous demandez comment sélectionnez tous les ID employés distincts. Modifier votre clause SELECT à SELECT DISTINCT e.EMPLOYEE_ID, plutôt que de renvoyer les ID des gestionnaires de magasin.

La réponse de RedFilter s'exprime bien. :)

0
SELECT e.EMPLOYEE_ID ... INNER JOIN EMPLOYEES e ON e.MANAGER_ID = s.MANAGER_ID ... 

Vous pouvez ajouter le mot-clé DISTINCT avant l'ID d'employé, si les données sont correctement normalisées qui ne devrait pas être nécessaire.