日期:2014-05-17  浏览次数:20536 次

sql判断是否在这些范围内 找出不在这个表范围内的数据
a表 范围表 字段2个   startnum   endnum  (end比start大)bigint类型  
数据:
16777472 16778239
16779264 16781311
16785408 16793599
…………
16973824 17039359
17039616 17040383
………………省略 这个表数据几十万
17435392 17436671
17436672 17465343
17563648 17825791

b表 一个字段 num   bigint类型
数据
16777472
16777728
16777984
16779264
……省略 这个表数据上百万
16779776
16780032
16780288
16780544
16780800

a表数据唯一  b表数据唯一  

需要筛选出 b表 数据 不在a表范围内 的数据

select * from a_tb WHERE num BETWEEN startnum AND endnum  一个数据判断像这样 现在是两表了 
筛选出 不在a表范围的b表数据  怎么来?
sql范围筛选

------解决方案--------------------
上面一个是在范围的。


不在范围的加一个not:
select * from 表b b where not exists(select 1 from 表A where b.num>=startnum and b.num<=endnum)

------解决方案--------------------

select t.p into iptemp from (
SELECT b.p FROM tb1  a  JOIN  tb2 b
on   b.num  between a.startnum and   a.endnum
) t

SELECT  p FROM tb2 except
SELECT  p FROM iptemp