2010-01-29 2 views
2

Я хотел бы сделать один запрос на одной таблице без использования UNIONКак я могу написать этот запрос MYSQL без использования 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 записей выше определенной записи (по заказу field3, а не идентификатор), и 5 записей под ним, не захватывая саму запись в результатах.

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

+1

Если вы используете> = и <=, вы можете получить дубликат строки. Это то, что вы хотите? –

+0

Это домашнее задание? Какая еще причина для запрета «союза»? –

+0

@ St.Woland: Ты прав. Я отредактировал пример, чтобы показать> = и <. @ Jørn: Это довольно забавно. На самом деле, я пытаюсь построить запрос в CakePHP framework, и UNION не поддерживается. Я обновляю старое устаревшее приложение, которое просто запускает два отдельных запроса. – Stephen

ответ

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 
+0

Разве вы не присоединяетесь к подзапросам 'a' и подзапросам' b' без условий? Это вернет намного больше строк, чем ожидалось. –

+0

Это выглядит хорошо. Использование подзапросов в cakePHP - трудная работа. Я хотел бы избежать использования $ this-> Model-> query, но хорошо. – Stephen

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