11.1 递归查找单个引用
递归运算是指直接或者间接地调用自身的运算方法。比如我们熟悉的汉诺塔问题,就是典型的递归运算。在实际应用中递归查询问题也很常见,比如我们想知道某个部门有哪些上级机构。单纯的查找这个部门的上级机构并不难,但是找到其上级机构以后,还要继续查找其上级机构的上级机构,而且我们并不知道一共要查找多少层从属关系,这时就要用到递归运算了。
11.1 递归查找单个引用
单表自连接后,对指定记录递归查找指定字段的各级引用。
从某公司组织结构表中,查询北京市场调研小组的所有上级机构。
ID | ORG_NAME | PARENT_ID |
---|---|---|
1 | Head Office | 0 |
2 | Beijing Branch Office | 1 |
3 | Shanghai Branch Office | 1 |
4 | Chengdu Branch Office | 1 |
5 | Beijing R&D Center | 2 |
… | … | … |
使用 rvs() 函数使序列倒置。
脚本:
A | |
---|---|
1 | =connect(“db”) |
2 | =A1.query@x(“select * from Organization”) |
3 | >A2.switch(PARENT_ID,A2:ID) |
4 | =A2.select@1(ORG_NAME==“Beijing Market Research Team”) |
5 | =A4.prior(PARENT_ID) |
6 | =A5.rvs().(ORG_NAME).concat("/") |
A1 连接数据库
A2 查询组织结构表
A3 将 PARENT_ID 外键映射到该 ID 所在的记录,实现自连接。
A4 选出北京市场调研小组所在记录
A5 使用 prior 函数查出上级单位
A6 使用 rvs 函数将上级单位按上级到下级排列
运行结果:
Value |
---|
Head Office / Beijing Branch Office / Beijing Marketing Department / Beijing Market Research Team |