Как я могу написать этот запрос MYSQL без использования UNION?

Я хотел бы сделать один запрос к одной таблице без использования UNION

Вот два запроса, которые мне нужно объединить.

SELECT field1, field2, field3 FROM table1 WHERE field4 != 'condition1' AND feild3 >= 'condition2' ORDER BY field3 ASC LIMIT 20;
SELECT field1, field2, field3 FROM table1 WHERE field4 != 'condition1' AND feild3 < 'condition2' ORDER BY field3 DESC LIMIT 5;

По сути, я пытаюсь получить 20 записей выше определенной записи (упорядоченных по полю3, а не по идентификатору) и 5 ​​записей ниже нее, не захватывая саму запись в результатах.

Хитрость в том, что я не могу использовать UNION.


person Stephen    schedule 29.01.2010    source источник
comment
Если вы используете ›= и ‹=, вы можете получить повторяющуюся строку. Это то, что вы хотите?   -  person St.Woland    schedule 29.01.2010
comment
Это домашнее задание? По какой другой причине вы могли бы запретить union?   -  person Jørn Schou-Rode    schedule 29.01.2010
comment
@St.Woland: Ты прав. Я отредактировал пример, чтобы показать ›= и ‹. @Jørn: Это довольно забавно. На самом деле, я пытаюсь создать запрос в среде CakePHP, а UNION изначально не поддерживается. Я обновляю старое устаревшее приложение, которое просто выполняло два отдельных запроса.   -  person Stephen    schedule 29.01.2010
comment
Модели CakePHP имеют метод запроса — book.cakephp.org/view/456/query. - которым вы можете передавать операторы SQL.   -  person dr.    schedule 29.01.2010
comment
Совершенно верно, д-р. Но тогда он не вернет никаких зависимых моделей. Я смотрю документацию для подзапросов.   -  person Stephen    schedule 29.01.2010
comment
@Stephen: Вы пробовали свой принятый ответ?   -  person Peter Lang    schedule 29.01.2010


Ответы (1)


Вы можете сделать что-то вроде следующего:

select a.*, b.*
from (select field1, field2, field3 
      from table1 
      where field4 != 'condition1' 
        and feild3 >= 'condition2' 
      order by field3 ASC 
      limit 20) a, 
     (select field1, field2, field3 
      from table1 
      where field4 != 'condition1' 
        and feild3 < 'condition2' 
      order my field3 desc
      limit 5) b
person lee-m    schedule 29.01.2010
comment
Разве вы не присоединяетесь к подзапросу a и подзапросу b без каких-либо условий? Это вернет гораздо больше строк, чем ожидалось. - person Peter Lang; 29.01.2010
comment
Это выглядит хорошо. Использование подзапросов в cakePHP — сложная работа. Я хотел избежать использования $this-›Model-›query, ну да ладно. - person Stephen; 29.01.2010