11.10 查找引用链上有指定值的记录,并列出上级

 

单表自连接后,过滤出引用链上有指定值的记录,然后列出上级。
在中国行政区划表中,查询河北省下属行政区。

ID NAME PARENT_ID
1 China 0
11 Beijing 1
12 Tianjin 1
13 Hebei 1
… … …
1301 Shijiazhuang 13
1302 Tangshan 13
… … …

使用 P.nodes(F,r) 函数过滤出引用链上有指定值的记录。

脚本:

A
1 =connect(“db”)
2 =A1.query@x(“select * from ChinaRegion”)
3 >A2.switch(PARENT_ID,A2:ID)
4 =A2.select@1(name==“Hebei”)
5 =A2.nodes(PARENT_ID,A4)
6 =A5.new(ID,NAME,PARENT_ID.NAME:PARENT_NAME)

A1 连接数据库
A2 查询中国行政区划表
A3 将 PARENT_ID 外键映射到该 ID 所在的记录,实现自连接。
A4 查找河北省所在记录
A5 使用 nodes 函数递归查找引用直到 PARENT_ID 指向河北省
A6 创建由序号、名称和上一级区域名称组成的序表。

运行结果:
A5:

ID NAME PARENT_ID
1301 Shijiazhuang [13,Hebei,]
1302 Tangshan [13,Hebei,]
1303 Qinhuangdao [13,Hebei,]
1304 Handan [13,Hebei,]
1305 Xingtai [13,Hebei,]
… … …
130102 Changan District [1301,Shijiazhuang,]
130104 Qiaoxi District [1301,Shijiazhuang,]
130105 Xinhua District [1301,Shijiazhuang,]
130107 Jingxing mining area [1301,Shijiazhuang,]
130108 Yuhua District [1301,Shijiazhuang,]
130109 Gaocheng District [1301,Shijiazhuang,]
… … …

A6:

ID NAME PARENT_NAME
1301 Shijiazhuang Hebei
1302 Tangshan Hebei
1303 Qinhuangdao Hebei
1304 Handan Hebei
1305 Xingtai Hebei
… … …
130102 Changan District Shijiazhuang
130104 Qiaoxi District Shijiazhuang
130105 Xinhua District Shijiazhuang
130107 Jingxing mining area Shijiazhuang
130108 Yuhua District Shijiazhuang
130109 Gaocheng District Shijiazhuang
… … …