11.11 查找所有上级引用

 

单表自连接后,查找所有上级引用。
在中国行政区划表中,列出各行政区的所有上级区域。。例如石家庄输出:
China,Hebei,Shijiazhuang

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

使用 P.nodes@p(F,r) 函数查找所有上级引用。

脚本:

A
1 =connect(“db”)
2 =A1.query@x(“select * from ChinaRegion”)
3 >A2.switch(PARENT_ID,A2:ID)
4 =A2.nodes@p(PARENT_ID)
5 =A4.run(=.(NAME).concat@c())

A1 连接数据库
A2 查询中国行政区划表
A3 将 PARENT_ID 外键映射到该 ID 所在的记录,实现自连接。
A4 使用 nodes 函数的 @p 选项递归查找所有上级引用
A5 将上级引用的名称拼在一起,使用逗号分隔

运行结果:
A4:

Member
1,China,
[[1,China,],[11,Beijing,]]
[[1,China,],[12,Tianjin,]]
[[1,China,],[13,Hebei,]]
[[1,China,],[13,Hebei,],[1301,Shijiazhuang,]]
[[1,China,],[13,Hebei,],[1302,Tangshan,]]
[[1,China,],[13,Hebei,],[1303,Qinhuangdao]]
[[1,China,],[13,Hebei,],[1301,Shijiazhuang,],…]
[[1,China,],[13,Hebei,],[1301,Shijiazhuang,],…]
[[1,China,],[13,Hebei,],[1301,Shijiazhuang,],…]

A5:

Member
China
China,Beijing
China,Tianjin
China,Hebei
China,Hebei,Shijiazhuang
China,Hebei,Tangshan
China,Hebei,Qinhuangdao
China,Hebei,Shijiazhuang,Changan District
China,Hebei,Shijiazhuang,Qiaoxi District
China,Hebei,Shijiazhuang,Xinhua District