Как найти строку, в которой определенное значение находится между двумя другими?

0

Итак, у меня есть таблица mysql, которая выглядит примерно так, где первые 2 столбца содержат диапазоны.

1 , 5  , Value1
6 , 14 , Value2
14 , 18 , Value3

Как я могу запросить, какая строка имеет какое-то значение (т.е. если у меня есть 9, она возвращает Value2, если у меня 2, она возвращает Value1). Эта таблица размером около 10 мб, поэтому чем эффективнее, тем лучше.

Спасибо!

  • 0
    в 9 примере его нужно вернуть value2 + value3?
  • 0
    К сожалению. Нет, наспех сделанный пример. Нет случаев наложения.
Теги:

4 ответа

1
Лучший ответ
SELECT
  val
FROM
  table
WHERE
  table.range_min <= 9
  AND table.range_max >= 9
  /* OR 9 BETWEEN table.range_min AND table.range_max*/

Для повышения эффективности добавьте индекс для столбцов range_min и range_max.

2

На самом деле это почти то же самое, что и madgnome, но IMO немного чище:

SELECT ... WHERE 9 BETWEEN min_value AND max_value;
  • 0
    Есть ли какая-то польза, кроме чистоты, от использования BETWEEN вместо> = AND <=?
  • 0
    Если все аргументы имеют одинаковый тип, два выражения эквивалентны. dev.mysql.com/doc/refman/5.0/en/...
0
where fielda >= 9 and fieldb <=  9 

добавить индекс, который содержит это поле 2 в таблице

0
select col3 from thetable where 2 between col1 and col2

Для этого вам нужен комбинированный индекс col1 и col2.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню