2010-11-24 2 views
0

Скажем, у меня есть три таблицы:MySQL присоединиться к возвращать различные идентификаторы, связанные с другой таблицей

LOCATIONS - магазин может принадлежать нескольким адресатам и местоположение может иметь несколько магазинов

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

STORES - всего одна строка в магазине, каждый магазин имеет только один менеджер ID

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

СОТРУДНИКИ - менеджер может иметь несколько сотрудников, а сотрудники могут принадлежать более чем одному руководителю

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

И для данной местности (например, LOCATION_ID = 999), я хочу, чтобы все сотрудники управлялись в магазинах в этом месте.

Это заставляет меня список менеджеров, принадлежащих магазинов в этом месте:

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

То, что я на самом деле хочу это все различные EMPLOYEE_IDs, которые связаны с менеджерами, которые запрос выплевывает.

Какое дополнительное соединение можно добавить в тот же запрос, чтобы получить это?

ответ

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

Странно, я думал, что пробовал эту штуку, но только один EMPLOYEE_ID за МЕНЕДЖЕР, я явно что-то испортил. Благодаря! – NChase 2010-11-24 20:46:42

0

Добавление INNER JOIN Employees e ON s.MANAGER_ID = e.MANAGER_ID должно предоставить вам сотрудников.

Но я замечаю, что вы просите, как выберите все отдельные идентификаторы сотрудников. Измените предложение SELECT на SELECT DISTINCT e.EMPLOYEE_ID, вместо того, чтобы возвращать идентификаторы менеджеров магазина.

Ответ RedFilter гладко звучит. :)

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

Вы можете добавить ключевое слово DISTINCT перед сотрудником ID, однако, если данные правильно нормировать, что не должно быть необходимым.

Смежные вопросы