/ / Чи можете ви спростити цей запит? - mysql, sql

Чи можете ви спростити цей запит? - mysql, sql

У мене є таблиця з цією структурою:

CREATE  TABLE IF NOT EXISTS `mydb`.`sizes` (
`id_size` INT NOT NULL ,
`cm_min` INT NOT NULL ,
`cm_max` INT NOT NULL ,
PRIMARY KEY (`id_size`) )
ENGINE = InnoDB;

Цей запит повертає ширину та висоту розміру 5:

select cm_min, cm_max from sizes where id_size = 5;

які є:

45, 56

Ну, я хочу отримати всі розміри, які мають cm_min або cm_max між цим діапазоном. Я торкнувся щось подібне:

http://sqlfiddle.com/#!2/83e93/51

Він працює, але є розміри, які не знаходяться між будь-яким діапазоном. Я маю на увазі, якщо у мене це є:

id_size    cm_min    cm_max
1          56        59
2          63        67
3          70        74
4          76        79
5          83        86
6          60        62
7          12        14

Якщо я "значу значення id_size 6, і явиконайте попередній запит, він "повертає 0 вибраних рядків, і я хочу отримати id_size розмірів вище і менше, ніж це, хоча не строго між значеннями. У цьому випадку повернеться:

id_size    cm_min    cm_max
1          56        59
2          63        67

Або, наприклад, якщо мають значення te id_size 7, що є другорядним значенням, мені потрібно отримати наступне незначне значення, у моєму випадку це:

id_size    cm_min    cm_max
1          56        59

Або якщо мені "вище значення," мені потрібен ідентифікатор розміру, який має другі більш високі значення.

Тоді, якщо перший запит, який я опублікував, не має жодного результату, я це роблю: http://sqlfiddle.com/#!2/83e93/32/0

Це працює для. Отже, моє питання: Чи можу я зробити те ж саме з одним запитом?

Я сподіваюся, що я зрозумів своє пояснення і буду вдячний за будь-яку допомогу. Заздалегідь спасибі.

Відповіді:

1 для відповіді № 1

Нижче SQL допоможе вам розпочати роботу, яка поверне всі рядки, які є вищими або нижчими, ніж вибраний ідентифікатор, наприклад тут для id = 6

SELECT id_size
FROM sizes
WHERE (cm_min < 60 or  cm_min > 62) and
(cm_max < 60 or cm_max > 62);

Демонстрація SqlFiddle

Оновлення - приклад

Нижче я подав більш детальний приклад до вашої потреби: Видалити LIMIT 1 якщо вам потрібні всі записи, нижчі та вищі

SELECT id_size , "lower"
FROM sizes
WHERE (cm_min < 12 AND cm_max < 12)
LIMIT 1
UNION
SELECT id_size , "HIGHER"
FROM sizes
WHERE (cm_min > 14 AND cm_max > 14)
LIMIT 1

Демонстрація SqlFiddle