【问题标题】:MySQL, Find all employees of a "manager"MySQL,查找“经理”的所有员工
【发布时间】:2013-05-28 18:26:31
【问题描述】:

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

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

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

我们将不胜感激。

【问题讨论】:

  • 经理所在的所有记录。我知道我需要一个相交来获取经理的 ID 和他的位置

标签: php mysql database laravel


【解决方案1】:

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

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

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

【讨论】:

  • 嘿,这是正确的,我想检索所有单独的记录,而不是它们的计数。谢谢
  • 已编辑以检索所有记录而不是计数
  • 这适用于所有位置的每个员工,但如果经理没有分配到与该部门员工相同的位置,那么它不应该显示吗?
  • 每个位置都有一组部门。所以位置 1 会有 5 个部门,位置 2 也有。如果经理仅在位置 1,他们不应该看到位置 2 员工(分配到该位置的部门)的记录
  • 啊,我明白了。我去看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 1970-01-01
  • 2019-11-02
  • 2015-09-04
相关资源
最近更新 更多