将旧表中序号重新编排为新表缺失的序号并合并
例题描述和简单分析
某数据库中有表OLDTABLE,RANK 是从 1 开始的连续数字,数据如下所示:
ITEM |
RANK |
o1 |
1 |
o2 |
2 |
o3 |
3 |
o4 |
4 |
o5 |
5 |
有NEWTABLE,RANK 是包含于 OLDTABLE 的不连续的数字,数据如下所示:
ITEM |
RANK |
n1 |
3 |
n2 |
5 |
需要将NEWTABLE 的记录按两表 RANK 的次序,插入到 OLDTABLE 中,且其后的 RANK+1,结果如下:
ITEM |
RANK |
o1 |
1 |
o2 |
2 |
n1 |
3 |
o3 |
4 |
n2 |
5 |
o4 |
6 |
o5 |
7 |
解法及简要说明
在集算器中编写脚本p1.dfx,如下所示:
A |
|
1 |
=connect("demo") |
2 |
=A1.query("SELECT * FROM OLDTABLE ORDER BY RANK") |
3 |
=A1.query("SELECT * FROM NEWTABLE ORDER BY RANK") |
4 |
>A1.close() |
5 |
>A3.run(A2.insert(RANK,A3.ITEM,A3.RANK)) |
6 |
>A2.run(RANK=#) |
7 |
return A2 |
简要说明:
A1 连接数据源名称为 demo 的数据库
A2 查询指定的 SQL,返回查询结果所组成的序表
A3 查询指定的 SQL,返回查询结果所组成的序表
A4 关闭数据库连接
A5 循环 A3,在 A2 的当前 A3 的 RANK 对应的位置,插入当前 A3 记录
A6 将 A2 的 RANK 按序号赋值
A7 返回 A2
JAVA 集成这段代码的方法可参考:《Java 如何调用 SPL 脚本》。
https://stackoverflow.com/questions/64141189/combine-tables-based-on-fixed-rank
英文版