A表存储的为Sr范围
ID    SrFrom  SrTo
 1    1      3
 2    4     8
 3    9     11我现在想查询这些Sr: 2、10 ,结果应该是A表的第一条和第三条记录满足条件。
想查询这些Sr: 2、6、10 ,结果应该是A表的所有三条记录满足条件。
这些SQL语句怎么写啊?
是Select * from A where ??? in (2,6,10) 还是怎么写啊?急!!

解决方案 »

  1.   

    WITH a AS(
    SELECT 1 ID,1 SrFrom,3 SrTo FROM dual UNION ALL 
    SELECT 2, 4, 8  FROM dual UNION ALL 
    SELECT 3, 9, 11 FROM dual
    ),
    tb AS(SELECT '2,6,10' id FROM dual   --这里是你的'2,6,10'
    ),
    b AS(
    select substr(','||id||',',instr(','||id||',',',',1,level)+1,
              instr(','||id||',',',',1,level+1)-instr(','||id||',',',',1,level)-1) sr
    from tb
    connect by
    level <= length(','||id||',') - length(replace(','||id||',', ',', ''))-1)
    SELECT a.* FROM a,b WHERE b.sr BETWEEN a.SrFrom AND a.SrTo
    ID SRFROM  SRTO
    -------------------
    1   1  3
    2   4  8
    3   9 11