频道栏目
首页 > 资讯 > 其他综合 > 正文

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

16-12-10        来源:[db:作者]  
收藏   我要投稿

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表的所有数据,从数据可以 看出, 7号request的数据有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 );
相关TAG标签
上一篇:MySQL数据库(二)
下一篇:Oracle:数据库设计三大范式
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站