代码之家  ›  专栏  ›  技术社区  ›  esac

如何查找一组数字在两个数字之间的行?

  •  1
  • esac  · 技术社区  · 14 年前

    我有一个查询返回一组数字:

    SELECT Sequence FROM Table1 WHERE Hash=2783342
    

    返回:

    578
    642
    313
    

    现在,我想在第一个表中找到所有行,其中任何一组数字都位于其他两列之间。为了举例说明,我只挑选了578个,但我还想要所有其他的:

    SELECT * FROM Table1 WHERE 578 BETWEEN Sequence AND SequenceEnd
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   OMG Ponies    14 年前

    使用联接,但存在重复风险:

    SELECT t.*
      FROM TABLE1 t
      JOIN (SELECT Sequence FROM Table1 WHERE Hash=2783342) x ON x.sequence BETWEEN t.sequence 
                                                                                AND t.sequenceend
    

    使用不存在重复风险:

    SELECT t.*
      FROM TABLE1 t
     WHERE EXISTS(SELECT NULL
                    FROM TABLE1 x
                   WHERE x.hash = 2783342
                     AND x.sequence BETWEEN t.sequence 
                                        AND t.sequenceend)