如何找到两个数据库表的差异?
2020-05-08 本文已影响0人
爱学习的代代
项目背景:近来测试的一个项目,需求大致是这样的:一个渠道的结算系统有两种结算方式(平价和阶梯价),分别放在A表和B表,不过A、B表中均有一个相同的字段(渠道ID)可以去查询到对应的结算方式的ID。然后根据结算方式的ID去获取结算方式的细节(C表),提供给外部系统使用。
经过分析需求得知:同一个时间段仅有一个结算方式生效。且提供给外部的接口需要传入渠道号,及时间戳。
一个渠道的结算方式可能的情况:
- 仅有平价结算方式
- 仅有阶梯价结算方式
- 既有平价结算方式,又有阶梯价结算方式(生效的时间段不同,当前时间段仅有一个结算方式生效)
针对前两种情况,一般我们的测试思路是从表中找数据,然后进行验证。可是又需要保证仅有的一种结算方式的情况。
此时也就转化成了求两个表差异的问题。
解决方案:
1、sql实现(关联字段用x代替)
-- 找出A中有 B没有的数据
select * from A where (select count(*) from B where A.x = B.x ) = 0
-- 找出A、B中共有的数据
select * from A where (select count(*) from B where A.x = B.x ) > 0
2、代码实现(Python版本)
if __name__ == '__main__':
A = [1, 3, 4, 5, 7, 8]
B = [2, 3, 5, 9, 0]
# A与B的差异元素
result = []
for i in A:
if i not in B:
result.append(i)
print("找出A中比B多的元素,并输出")
print(result)
result.clear()
# 找出AB中相同的元素并输出
for i in A:
if i in B:
result.append(i)
print("A、B中相同的元素:")
print(result)
小结:一个挺简单的项目,只要我们能进行深入的思考,还是会有一些收获的。尽可能问问自己,我能从这个项目中学到什么,然后自己给自己提出问题,解决问题。