对比两条数据,找到差异列

对比两条数据,找到差异列

【问题】

对同表中的 2 行数据全部进行对比,取出不同的数据
ID  字段 1 字段 2 字段 3 字段 4…
1    a       b        c       d
2    a       c        c       d

预期的结果:
ID  字段 2
1    b
2    c

原始需求是:每个 ID 对应一组参数(每组参数个数近百个),只保存 2 组,需求就是对比这两组参数是否做了改动。举个例子的话就是:
菜名,配料 1,配料 2,配料 3,配料 4,…
红烧肉,10 克,10 克,10 克,10 克,
红烧肉,10 克,12 克,10 克,10 克,
需求就是知道红烧肉的配料 2 由 10 克,变成了 12 克
【回答】

SQL 是面向批量数据的,很难直接处理这种离散的记录,而且返回动态列结果集也非常困难,这种情况只能读出来自己比较(比如写成存储过程),但有集合运算和动态列,写起来也比较麻烦。使用 SPL 可以按自然想法写出运算,比较直接。思路就是找到两条数据中数值不同的列并获取列名,然后新建出结果序表:

A
1 =connect(“test”)
2 =A1.query@x("select * from menu where id ="+id_)
3 =A2(1).array()
4 =A2(2).array()
5 =A3.pselect@a(~!=A4(#))
6 =A5.(A2.fname(~)).concat(“,”)
7 =A2.new(id,${A6})

A1: 连接 test 数据库。

A2:查原始表。需求中只要一组记录,这里用集算器参数 id_ 动态传值。

A3,A4: 分别获取 id 相同的两条记录,值转化为数组。

A5:对比两数组相同位置上值是否不同,满足条件就挑出其序号。

A6:利用序号获取原表中的列名,拼成字符串。

A7:由 A2 新生成结果序表。

原表:

imagepng

A2

imagepng

A3,A4

imagepngimagepng

A5,A6

imagepngimagepng

A7

imagepng

K