table IDlistmain_id-------subid
1-------------9501
1-------------9503
1-------------9504
1-------------9401
1-------------9402
1-------------9601
2-------------9401
2-------------9601
3-------------9401
3-------------9402
4-------------9601
4-------------9602关系是这样:
子ID 一共有3类   9500~9599  、9400~9499 、9600~9699
主ID 可以随意对应上面3类中的任意多个ID但如果主ID下的子ID 全是 9400~9499 或者 9600~9699,或者是这两个范围类的混搭的ID,那么这个主ID就不要
如上面的列子,符合这个现象主ID 2、3、4就不是我想要的但如果主ID下的子ID 中只要出现一个是 9500~9599  范围类的, 那这个主ID 就是我想要的ID
如上面的例子,符合这个现象主ID 1 就是我想要的了另外实际中 主ID是未知的,是来自另一段SQL查询结果求查出加粗部分条件的SQL....

解决方案 »

  1.   

    select distinct id from table t where  t.subid between 9500 and 9599
      

  2.   

    LS  不能只要 9500~9599 范围的,如果出现和其他两类混搭也要,但只要其中有一个是9500~9599 就要全是 9500 and 9599 要
    9500 and 9599 和其他两类混搭的也要
      

  3.   

    只取main_id还是所有数据都要?
      

  4.   

    都要吧,为了核实查询结果,都查出来比较好。  主要还是要main_id
      

  5.   

    只要main_id的话上面那个sql就可以啊.
    如果都要就套一层
    select * from table a where exists(
    select 1 from table b where b.subid between 9500 and 9599 and b.main_id=a.main_id)
      

  6.   

    LS 不对啊  你这个和之前的还是一样的,还是只要了 9500 and 9599 范围的
    主ID 下如果有  9500  9400 9600,这个主ID 要
    主ID 下如果有  9500  9501 9502,这个主ID 要
    主ID 下如果有  9500  9400 9411,这个主ID 要
    主ID 下如果有  9400  9401 9600,这个主ID 不要是这概念
      

  7.   

    LS 不对啊  你这个和之前的还是一样的,还是只要了 9500 and 9599 范围的
    主ID 下如果有  9500  9400 9600,这个主ID 要
    主ID 下如果有  9500  9501 9502,这个主ID 要
    主ID 下如果有  9500  9400 9411,这个主ID 要
    主ID 下如果有  9400  9401 9600,这个主ID 不要是这概念
      

  8.   

    只要找出SUBID存在于9500 ~ 9599的就是了啊:select * from IDlist a where exists(
    select 1 from IDlist b where b.subid between 9500 and 9599 and b.main_id=a.main_id)
      

  9.   

    再补充一个问题,就是在这个基础上尽可能的调优实际中 9500 and 9599  这一类的ID数量很大而其他两类的子ID加起来 也不超过20个如果直接 exists 9500 and 9599 ,而且量也很大的话  速度上可能会比较慢
      

  10.   

    sql>select distinct id from table t where t.subid between 9500 and 9599