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