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