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