如何过滤2列之间的数字组?

时间:2012-01-04 13:42:44

标签: mysql sql

我有一个包含minmax列的表格。我想搜索一组数字在minmax范围之间的行。

示例:我有一组(3, 4, 11, 18)

  1. 我的查询过滤可能会显示:

    (3 between min and max) OR
    (4 between min and max) OR
    (11 between min and max) OR
    (18 between min and max)
    
  2. 但我想知道是否有更好的方式:

    (3,4,11,12) between min and max
    

    与#1

  3. 类似

    我需要这个,因为该集可以在不同的搜索之间改变。任何帮助或建议都表示赞赏。

    更简单上下文中的表是类(classid,classname,minage,maxage)。有成千上万的类 - 所以我得到web请求搜索具有特定年龄组的类,例如(3,4,11,12),其中用户正在搜索3岁,4岁,11岁和12岁的班级。

    目前我的查询看起来: select * from class where((3 in min and max)OR(4 min and max)OR(11 min and max)OR(18 min and max))

3 个答案:

答案 0 :(得分:2)

这样的东西
SELECT * 
  FROM MyTable AS T
 WHERE EXISTS (
               SELECT *
                 FROM MySet AS S
                WHERE S.val BETWEEN T.my_min AND T.my_max
              );

答案 1 :(得分:0)

如果您可以通过发布表架构来添加更多信息,我们将能够为您提供更多帮助。但是,此示例查询可以为您提供一些提示。

示例查询:

SELECT SampleValue, ColB, ColC FROM TableName WHERE SampleValue in (1,2,3)

答案 2 :(得分:0)

另一种方法是首先创建一个表(一次)并用所有可能的年龄(从1到101)填充它:

CREATE TABLE Age
( allowed TINYINT
, PRIMARY KEY (allowed)
) ;

INSERT INTO Age
  VALUES
  (1), (2), (3), ... (101) ;

在搜索查询中使用此功能:

SELECT *
FROM Class 
WHERE EXISTS
      ( SELECT *
        FROM Age
        WHERE Age.allowed BETWEEN Class.minage AND Class.maxage
          AND Age.allowed IN (3, 4, 11, 18)
      )