一、oracle中的递归查询上下级部门关系
采用的语法为 start with 。。。 connect by ..... = prior ....
我们部门表中存在这样几条记录
id | parent_id | name |
1 | null | 财大 |
2 | 1 | 计科 |
3 | 1 | 英语 |
4 | 2 | 软工8班 |
5 | 3 | 英语班6班 |
1.当我们想要获取到财大下面的所有子部门,我们可以采用这样的写法:
SELECT * FROM t_department t
START WITH t.id = 1
CONNECT BY t.parent = prior t.id
prior的英文解释为先前的,这个递归查询中就是作为查询条件,去查询表中记录的parent_id 和本次查询相等的记录
我们查询的结果排序是从一个部门查到底结束,相当于一个树形结构的遍历,查询到的结果显示为:
id | parent_id | name |
1 | null | 财大 |
2 | 1 | 计科 |
4 | 2 | 软工8班 |
3 | 1 | 英语 |
5 | 3 | 英语班6班 |
2.当我们想要查找上级部门的时候,同理:
SELECT * FROM t_department t
START WITH t.i = '4'
CONNECT BY t.id = prior t.parent_id
我们拿着parent_id值作为查询的条件,去表中查询id和parent_id相等的记录:
id | parent_id | name |
4 | 2 | 软工8班 |
2 | 1 | 计科 |
1 | null | 财大 |