11.9 Search for the upper-level reference

 

Perform a self-join on a single table and search for the record’s upper-level reference.
Find the upper-level region name for each administrative region based on China administrative division table.

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

SPL offers P.nodes(F) function to get a record’s upper-level reference.

SPL script:

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

A1 Connect to the database.
A2 Query ChinaRegion table.
A3 Map foreign key PARENT_ID to the corresponding record to achieve self-join.
A4 Use nodes() function to find the record’s upper-level refence.
A5 Create a table sequence consisting of ID, region name and upper-level region name.

Execution result:

A4:

ID NAME PARENT_ID
1 China (null)
11 Beijing [1,China,]
12 Tianjin [1,China,]
13 Hebei [1,China,]
… … …
1301 Shijiazhuang [13,Hebei,]
1302 Tangshan [13,Hebei,]
1303 Qinhuangdao [13,Hebei,]
… … …
130102 Changan District [1301,Shijiazhuang,]
130104 Qiaoxi District [1301,Shijiazhuang,]
130105 Xinhua District [1301,Shijiazhuang,]
… … …

A5:

ID NAME PARENT_NAME
1 China (null)
11 Beijing China
12 Tianjin China
13 Hebei China
… … …
1301 Shijiazhuang Hebei
1302 Tangshan Hebei
1303 Qinhuangdao Hebei
… … …
130102 Changan District Shijiazhuang
130104 Qiaoxi District Shijiazhuang
130105 Xinhua District Shijiazhuang
… … …