MySQL join返回从另一个表链接的不同ID

时间:2010-11-24 20:22:48

标签: mysql join

假设我有三张桌子:

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_ID。

我可以在同一个查询中添加哪些其他联接来获取它?

3 个答案:

答案 0 :(得分: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; 

答案 1 :(得分:0)

添加INNER JOIN Employees e ON s.MANAGER_ID = e.MANAGER_ID可以让您成为员工。

但我注意到你在询问如何选择所有不同的员工ID。将SELECT子句更改为SELECT DISTINCT e.EMPLOYEE_ID,而不是返回商店经理的ID。

RedFilter的答案很好地解释了它。 :)

答案 2 :(得分:0)

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

您可以在员工ID之前添加DISTINCT关键字,但是如果数据已正确规范化,则不需要。