查询与经理无对应权限地点的员工的PostgreSQL脚本求助
解决PostgreSQL权限合规性查询问题
表结构假设
先基于业务场景给出合理的表字段假设(如果你的实际字段名不同,直接替换即可):
employee:employee_id(主键)、location_id(员工所在地点)permission:manager_id(关联employee.employee_id)、location_id、permission_type(值为'manager'表示该地点的经理权限)reporting:employee_id(被管理员工ID,关联employee.employee_id)、manager_id(经理ID,关联employee.employee_id)
查询脚本
下面的SQL会找出所有被分配给经理,但该经理没有对应员工所在地点经理权限的员工:
SELECT e.employee_id AS 员工ID, e.location_id AS 员工所在地点, m.employee_id AS 经理ID, m.location_id AS 经理所在地点 FROM employee e JOIN reporting r ON e.employee_id = r.employee_id JOIN employee m ON r.manager_id = m.employee_id LEFT JOIN permission p ON p.manager_id = m.employee_id AND p.location_id = e.location_id AND p.permission_type = 'manager' WHERE p.manager_id IS NULL;
逻辑解释
- 关联员工与经理:通过
reporting表将被管理员工(e)和其经理(m)关联起来 - 匹配经理权限:用左连接关联
permission表,筛选条件是经理ID匹配、权限地点等于员工所在地点、且权限类型为经理权限 - 筛选违规记录:左连接后,如果
p.manager_id为NULL,说明该经理没有对应员工所在地点的经理权限,这就是我们要找的违规记录
扩展说明
如果你的permission表没有permission_type字段(比如所有权限都是经理权限),可以去掉AND p.permission_type = 'manager'这个条件;如果字段名不同,比如员工表的地点字段叫work_location,直接替换对应字段名即可。
内容的提问来源于stack exchange,提问作者jemacosta08
相关产品推荐
相关产品推荐

