Как отфильтровать множество чисел между 2 столбцами? - PullRequest
6 голосов
/ 04 января 2012

У меня есть таблица со столбцами min и max.Я хочу найти строки, где набор чисел находится между этим диапазоном min и max.

Пример: у меня есть набор (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

Мне это нужно, потому что набор может меняться между различными поисками.Любая помощь или предложения приветствуются.

Таблица в более простом контексте - это class (classid, classname, minage, maxage).Существуют тысячи классов - поэтому я получаю веб-запрос на поиск классов с определенным набором возрастов, например (3,4,11,12), где пользователь ищет классы для возрастов 3, 4, 11 и 12.

В настоящее время мой запрос выглядит следующим образом: select * from class, где ((3 между min и max) ИЛИ (4 между min и max) ИЛИ (11 между min и max) ИЛИ (18 между min и max))

Ответы [ 3 ]

2 голосов
/ 04 января 2012

Что-то вроде

SELECT * 
  FROM MyTable AS T
 WHERE EXISTS (
               SELECT *
                 FROM MySet AS S
                WHERE S.val BETWEEN T.my_min AND T.my_max
              );
0 голосов
/ 05 января 2012

Другим способом было бы сначала создать таблицу (один раз) и заполнить ее всеми возможными возрастами (от 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)
      )
0 голосов
/ 04 января 2012

Мы могли бы помочь вам больше, если бы вы могли добавить больше информации, опубликовав схему таблицы.Однако этот пример запроса может дать вам некоторую подсказку.

Пример запроса:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...