2

我有一个“经理”,可以分配到许多位置并在每个位置处理一个部门。我想要一个可以抓住所有这些的查询:

http://sqlfiddle.com/#!2/33453c/1

在上面的示例中(在链接中),您可以看到我计算了每个部门有多少员工。

ManagersEmployees位于名为staff的表中,我不希望查询检索经理记录。所以 user_role = "Employee";

我在laravel 中将其作为原始查询运行,因此我可以将它们作为对象检索:

$employees= DB::query('query goes in here')->get();

例如,staff_id 为“5”的经理获取该经理所属的所有地点和部门中的每个员工,如果这有意义的话?

我的猜测是:

First Query SELECT ALL FROM staff, locations and departments where user_role = "employee"

Second Query SELECT ALL FROM staff, locations and departments where manager id=5

删除所有不满足第二个查询但将两个查询连接在一起的结果?

帮助将不胜感激。

4

1 回答 1

1

我想这就是你想要的。在员工的部门上左加入经理部门,并获取每个部门中“员工”员工的数量(即使为 0)

下面显示了经理 #2(如果您想查看所有经理,可以通过经理 ID 和部门 ID 消除 where 子句和分组)

SELECT dept.name AS dept, loc.address1 AS loc, emp.*
FROM staff AS mgr
INNER JOIN department_staff AS mgr_dept
    ON mgr_dept.staff_id = mgr.staff_id
INNER JOIN departments AS dept
    ON mgr_dept.dept_id = dept.dept_id    
INNER JOIN location_staff AS mgr_loc
    ON mgr_loc.staff_id = mgr.staff_id
INNER JOIN locations AS loc
    ON mgr_loc.loc_id = loc.loc_id    
INNER JOIN (
  SELECT emp.*, dept.dept_id, loc.loc_id
  FROM staff AS emp
  INNER JOIN department_staff AS dept
    ON emp.staff_id = dept.staff_id
  INNER JOIN location_staff AS loc
    ON emp.staff_id = loc.staff_id
  WHERE emp.user_role = "Employee"
) AS emp
  ON emp.loc_id = mgr_loc.loc_id 
  AND emp.dept_id = mgr_dept.dept_id
WHERE mgr.staff_id = 2
于 2013-06-02T12:24:45.230 回答