注册 登录
编程论坛 SQL Server论坛

求助:如何从两张不同的表中查询数据并加以比对

ssdos 发布于 2012-09-14 11:00, 13099 次点击
是这样的,每个月电信话单给我之后我需要从我自己的数据库中吧呼叫记录拿出来和电信话单的计费记录比对(只是比对电话号码),来确认电信话单有没有问题,但是这个月我发现电信话单里面的记录数目比我数据库中的要多,我想知道多在哪里
现在有两张表:电信话单表和自己外呼表
我之前抽检的时候是吧两张表里面的某一天抽取出来,做成另外两张表(比如电信话单表0101和自己外呼表0101),然后用下面语句比对:

select 电话号码 from 电信话单表0101 where 电话号码 not in (select 电话号码 from 自己外呼表0101 )

但是现在需要吧一个月的每一天都进行对比,这样按照上面的语句我要把每一天的数据都单独弄出来,这个很效率低下,请教一条语句让我实现直接查询两张表一天的数据并进行比对:
先查询两个表中的同一天的记录
select 电话号码 from 电信话单表 where 呼叫开始时间>=20120101 and 呼叫开始时间<20120102
select 电话号码 from 自己外呼表 where 呼叫开始时间>=20120101 and 呼叫开始时间<20120102
然后让上面两条语句查询的结果进行比对
3 回复
#2
cnfarer2012-09-14 23:21
一样可以用not in啊
#3
小Program2012-09-14 23:56
先找出二表同号码与时间:那么这个表肯定是自己打出且有电信记录的。
select 自己.号码,自己.呼出时间 into #查询表 from 电信单,自己单  where 电信.号码=自己.号码 and 电信.时间=自己.时间
再找出号码相等且时间不等的记录。。
select 号码,时间 from 电信单,查询 where 电信.号码=查询.号码 and 电信.时间<>查询.时间
和查询表中没有的号
select 号码 from 电信话单表0101 where 电话号码 not in (select 电话号码 from 查询)
#4
netlin2012-09-15 09:05
这种应用,对于SQL来说,是小菜!

楼主,你试一下:
查出所有 电信话单表 里多的记录:
select a.* from 电信话单表 a left join 自己外呼表 b on a.电话号码=b.电话号码 where b.电话号码 is null
1