A、B两张表 获取过滤条件后A表中除了B表中剩余的数据

A表中有一定量的数据, B表中有一定量的数据, 当B表中某些字段值和A表中的字段值一样时即认为这两条数据一致, 剔除A表中所有和B表中数据一致的记录,得出来A表独有的记录。

 博客中主要用到的是exists关键字。先写sql语句:

not exists:

Select * from response_data p where not exists (

 select 1 from request_data q 

where p.idno=q.idno and p.create_date=q.create_date and p.type=q.type and q.type=0 AND p.result=q.result  AND q.result=0);


not in:

SELECT * FROM response_data p WHERE p.idno NOT IN  (

SELECT q.idno FROM request_data q 

WHERE p.idno=q.idno  and p.create_date=q.create_date and p.type=q.type and q.type=0 AND p.result=q.result  AND q.result=0 );


---------以下为业务逻辑:

业务逻辑:

Request_data表中的数据是,公司调用收费接口的记录,收费接口有两种(type=0,1,调用结果(result=0,1);

Response_data表中的数据是,公司要求收费的一方(type=0),返回给我们的一份数据,用于公司对账(看看有没有出现,我们没有 调用他们的接口,但是他们有记录的数据, 他们有记录且调用成功的就会收费)。

 

由于是公司对账, 所以只需要查出来接口方提供的数据中我们表中没有的记录即可(这些记录就是多收费的记录,对于我们有记录但是接口方没有的记录,由于不需要我们付费,所以就不用理会这部分数据)。

最终数据=Response_data - Request_date


Request_date 表的数据:



Response_data 表的数据:



条件: Idno相同,日期相同, 接口方相同, 请求结果相同

Select * from response_data p where not exists

( select 1 from request_data q where p.idno=q.idno and p.create_date=q.create_date and p.type=q.type and q.type=0 AND p.result=q.result  AND q.result=0);

直接执行该语句, 则会返回Response_data表的所有数据,从数据可以 看出,7request的数据有4条, 调用接口方0,的有三条, 成功的有一条。但是这条数据的id并不等于response_data中的数据(即,接口方没有记录我们的这次成功请求,开心吧, 不用付费就用了他们的服务),也就是说,接口方多收了我们2条数据的费用。

 

SELECT * FROM response_data p WHERE p.idno NOT IN  (SELECT q.idno FROM request_data q WHERE

p.idno=q.idno  and p.create_date=q.create_date and p.type=q.type and q.type=0 AND p.result=q.result  AND q.result=0 );


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值