在同一表中进行递归查询
例题描述和简单分析
某数据库中有表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
英文版