将旧表中序号重新编排为新表缺失的序号并合并

例题描述和简单分析

某数据库中有表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