在同一表中进行递归查询

例题描述和简单分析

某数据库中有表SAMPLE,数据如下所示:

LINK

LINK_PATH

INFO

a

b

asdjh

w

y

akhaq

b

c

uiqwd

c


isado

y

z

qwiuu

z


nzabo

表中LINK_PATH 为 LINK 的上级,需要在该表中进行递归查询,例如找出 LINK 值为 a 的所有上级记录,结果如下:

LINK

LINK_PATH

INFO

a

b

asdjh

b

c

uiqwd

c


isado

解法及简要说明

在集算器中编写脚本p1.dfx,如下所示: 


A

1

=connect("demo")

2

=A1.query@x("SELECT * FROM SAMPLE")

3

>A2.switch(LINK_PATH,A2:LINK)

4

=A2.select@1(LINK==link).prior(LINK_PATH).run(LINK_PATH=LINK_PATH.LINK)

简要说明:

设脚本参数link,值为 a

A1   连接数据源名称为 demo 的数据库

A2  返回查询结果所组成的序表,结束时自动关闭数据库连接

A3  LINK_PATH 为 LINK 的上级,自连接

A4  根据 LINK_PATH 外键引用,查询 LINK 为 a 的所有上级记录

JAVA 集成这段代码的方法可参考:Java 如何调用 SPL 脚本》

问答搜集

https://stackoverflow.com/questions/64146943/select-linked-rows-in-the-same-table