假设我有三张桌子:
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。
我可以在同一个查询中添加哪些其他联接来获取它?
答案 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关键字,但是如果数据已正确规范化,则不需要。