2015-01-22 3 views
2

Вот мой стол тест со значениями:MySQL Query добавить ограничение в подзапрос

Price 
---------- 
300 
600 
900 
1000 
1800 
2000 

Я хочу запросить таким образом, что при поиске 300, я должен получить 4 записи 300,600,900,1000.

Если я ищу 900, я могу получить 600 900,1000,1800. т.е. две записи < = 900 и две записи> 900

Вот запрос я попробовал:

SELECT * FROM table h where CONDITIONS 
and (price in (select price from table where price <=900) // I want to add LIMIT 2 in this subquery 
or price in (select price from table where price >900)//LIMIT 2 
) 
order by FIELD(price ,900) DESC limit 5; 

Я искал много на переполнение стека, но ничего не получалось. Пожалуйста помоги .

ответ

5

Вы можете попробовать следующее ...

select * from ((select h.* from table_name h where amount <=300 order by amount desc limit 2) 
union 
(select h.* from table_name h where amount >300 order by amount limit 2)) 
derived_table order by FIELD(amount,300) desc; 
+1

Спасибо! Это сработало :) – Mann

+1

Могу ли я получить дополнительную спецификацию относительно этого вопроса? Bcz i застрял в запросе ?? –

0

Используя объединение, потому что эта версия MySQL не принимают предел в подзапросов

select * from table where price <=900 limit 2 union select * from table where price > 900 limit 2

+0

Пожалуйста, измените свой ответ и включают в себя какое-то объяснение в нем. Кодовые ответы иногда достаточно хороши, но ответы на код + объяснение всегда лучше. – Barranka

+0

Я сделаю это сейчас @Барранка. Извините и спасибо за подсказку. –

2

MySQL не поддерживает LIMIT в WHERE IN/EXSISTS/ANY/НЕКОТОРЫЕ подзапросов, вы можете сделать это с помощью UNION

(SELECT * /* this should be a columnlist */ 
FROM tablename 
WHERE price < 900 
ORDER BY price LIMIT 2) 

UNION 

(SELECT * /* this should be a columnlist */ 
FROM tablename 
WHERE price >= 900 
ORDER BY price LIMIT 2) 

Скобки вокруг каждого выбора имеют решающее значение.

See SQL Fiddle

+0

Да, я знаю. Разве нет никакого другого обходного пути, кроме СОЮЗА? – Mann

+0

Нет, вам нужен союз – Gervs

+0

В этом случае, заказ не работает. Я получаю сообщение об ошибке «Неправильное использование UNION и ORDER BY» – Mann

Смежные вопросы