我在Python中定义了一个名为Employees
的类。其属性id_supervisor
是负责他的员工的id
。
一名员工可以负责(监督)许多其他员工。
这是我的班级:
class Employee(DeclarativeBase):
__tablename__ = 'employees'
id_ = Column('id',Integer,primary_key=True)
name = Column(Unicode(50))
id_supervisor = Column(Integer, ForeignKey('employees.id'))
#other attributes ...
我需要做的是从公司老板那里获得公司的整个层次结构(他将id_supervisor
属性设置为None
或自己)到最低层公司的工作人员(他根本不会监督工人)。
怎么可以这样做?我一直在考虑使用递归函数,但我真的不知道该怎么做。
任何帮助都将不胜感激。
答案 0 :(得分:0)
请尝试使用材料https://class.coursera.org/db/wiki/coursematerials。您可以看到有关递归的部分(SQL中的递归)。 PostgreSQL示例很好地解释了它。
postgres=# select * from employees ;
empid | supervisorid
-------+--------------
1 |
2 |
3 | 1
4 | 2
5 | 3
6 | 4
(6 rows)
WITH RECURSIVE emp(empid,supervisorid) AS (
SELECT empid, supervisorid FROM employees where empid=1
UNION ALL
SELECT e.empid, e.supervisorid
FROM emp s, employees e
WHERE e.supervisorid = s.empid
)
SELECT *
FROM emp
;
empid | supervisorid
-------+--------------
1 |
3 | 1
5 | 3
(3 rows)