a表 范围表 字段2个   startnum   endnum  (end比start大)bigint类型  
数据:
16777472 16778239
16779264 16781311
16785408 16793599
…………
16973824 17039359
17039616 17040383
………………省略 这个表数据几十万
17435392 17436671
17436672 17465343
17563648 17825791b表 一个字段 num   bigint类型
数据
16777472
16777728
16777984
16779264
……省略 这个表数据上百万
16779776
16780032
16780288
16780544
16780800a表数据唯一  b表数据唯一  需要筛选出 b表 数据 不在a表范围内 的数据select * from a_tb WHERE num BETWEEN startnum AND endnum  一个数据判断像这样 现在是两表了 
筛选出 不在a表范围的b表数据  怎么来?sql范围筛选

解决方案 »

  1.   

    select * from 表b b where exists(select 1 from 表A where b.num>=startnum and b.num<=endnum)
      

  2.   

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

  3.   


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