Сортировка результатов нескольких запросов в одном запросе - PullRequest
0 голосов
/ 28 января 2011

У меня есть оператор выбора, возвращающий 5 столбцов:

select col1,col2,col3,col4,col5 from table1;

col1 col2 col3 col4 col5
 9     A    B   C    D
 8     E    F   G    H 

У меня есть еще один оператор select из table2, который возвращает только col1;

col1
8
9

Основываясь на двух запросах на выбор, есть ли способ написать один запрос на выборку для возврата результата в виде:

 col1 col2 col3 col4 col5
    8     E    F   G    H 
    9     A    B   C    D

т. в основном сортировать вывод I-запроса на основе col1 из II-запроса. (это в Mysql)

PS: столбец таблицы II таблицы II используется для сортировки, исходя из таблицы 2. Стол1 таблицы1 не является статическим, его изменение для каждого действия пользователя и в зависимости от вызова я получу столбец таблицы 2 и должен выполнить вывод таблицы 1.

Ответы [ 3 ]

1 голос
/ 28 января 2011

Использовать ORDER BY:

  SELECT col1,col2,col3,col4,col5 
    FROM table1
ORDER BY col1

По умолчанию ORDER BY - ASC.

  SELECT col1,col2,col3,col4,col5 
    FROM table1
ORDER BY col1 DESC

... поместит 9 из столбца col1 в качестве первой возвращенной записи.

0 голосов
/ 28 января 2011

Чтобы это работало, вам seriously нужен столбец sort в таблице2.Просто иметь идентификаторы в table2 недостаточно .Вы можете иметь записи 7,8,9, затем удалить 8 и добавить его обратно.Но нет , это не order как 7,9,8.Может быть временно, если в таблице нет первичного ключа, но когда таблица становится большой, даже этот «неявный» порядок теряется.

Итак, если у вас есть такой столбец сортировки

Table2
Sort, Col1
1, 9
2, 8

Ваш запрос становится

SELECT a.*
FROM table1 a
INNER JOIN table2 b ON a.col1 = b.col1
ORDER BY b.sort ASC

Если вы все еще хотите, чтобы полагался на недокументированные функции MySQL или то, как он работает в настоящее время, вы можете попробовать это.

# test tables
create table table1 (col1 int, col2 int, col3 int);
insert table1 select 8, 1,2;  # in this order
insert table1 select 9, 3,4;

create table table2 (col1 int);
insert table2 select 9;  # in this order
insert table2 select 8;

# select
SELECT a.*
FROM table1 a
INNER JOIN table2 b ON a.col1 = b.col1

----output----
col1  col2  col3
9     3     4
8     1     2

Это работает, по крайней мере, для небольших таблиц, только потому, что размер (таблица2) <размер (таблица1), поэтому он собирается в таком порядке, сохраняя сортировку файлов на table2.col1. </p>

0 голосов
/ 28 января 2011

Не уверен, какова связь между t1.col1 и t2.col2.Вероятно, ищет что-то вроде этого, хотя:

SELECT t2.col1, t1.col2, t1.col3, t1.col4, t1.col5
  FROM table2 t2
 INNER JOIN table1 t1 ON t1.col1 = t2.col1
 ORDER BY t2.col1 ASC
...