对比两条数据,找到差异列
对比两条数据,找到差异列
【问题】
对同表中的 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 新生成结果序表。
原表:
A2
A3,A4
A5,A6
A7
K