2014-01-04 2 views
1

У меня есть большая таблица, и я построил два запроса для первого запроса первых двух столбцов, а затем других столбцов. Мое намерение, очевидно, разместить первые 2 столбца данных сверху, а затем добавить данные других столбцов ниже. Вот запрос.sql объединить два запроса в одном и SORT BY

SELECT * FROM (SELECT * FROM mytable WHERE A LIKE 'query%' OR G LIKE 'query%' ORDER BY LENGTH(A)) 
UNION ALL 
SELECT * FROM (SELECT * FROM mytable WHERE I LIKE 'query' OR J LIKE 'query' LIMIT 15) 

Это работает нормально, но это слишком медленно. Есть ли способ сделать это быстрее. Потому что я чувствую, что делаю ненужные ВЫБОРЫ (4). Может быть, я могу сделать что-то подобное (я видел это предложение здесь на Stackoverflow):

SELECT * 
FROM 
     (
      SELECT *, 1 sortby FROM TABLE_A 
      UNION ALL 
      SELECT *, 2 sortby FROM TABLE_B 
     ) dum 
ORDER BY sortby 

Но я понятия не имею, как это сделать для моего случая.

Спасибо большое.

+0

Почему вам нужны результаты первого запроса на вершине тех из второго запроса? –

+0

Это технический словарь, и слова в первых столбцах важнее показать в первую очередь. Слова из столбцов впоследствии менее важны. – inrob

+0

Удалите, как если бы вам нужны точные результаты, используйте = 'WHERE I = 'query' OR J = 'query'' – Mihai

ответ

1

Да, вы правы. В вашем запросе есть 2 ненужных элемента. Это сработает, но я сомневаюсь, что это будет какая-то лучшая производительность.

SELECT * FROM mytable WHERE A LIKE 'query%' OR G LIKE 'query%' 
UNION ALL 
SELECT * FROM mytable WHERE I LIKE 'query' OR J LIKE 'query' LIMIT 15 
ORDER BY LENGTH(A) 
+0

Предложение ORDER BY должно появиться после UNION ALL не раньше – inrob

+0

OK, просто добавьте «ORDER BY LENGTH (A)» к последней строке (после последнего выбора). – carleson

-1

Вы попробуйте это:

Select m1.A,m2.I from (SELECT A FROM mytable m1 WHERE A LIKE 'query%' OR G LIKE 'query%' 

ORDER BY LENGTH(A) 

UNION ALL 

SELECT I FROM mytable m2 WHERE I LIKE 'query' OR J LIKE 'query' LIMIT 15)) 
ORDER BY m1.A,m2.I 
Смежные вопросы