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 |
… |