在单个查询中对多个查询结果进行排序

时间:2011-01-28 01:00:06

标签: sql mysql sql-order-by

我有一个返回5列的select语句:

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

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

我在table2中有另一个select语句,它只返回col1;

col1
8
9

基于两个选择查询,有没有办法编写单个选择查询以将结果返回为:

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

即。基本上根据II查询中的col1对I查询的输出进行排序。 (这是在Mysql中)

PS:II table column1用于排序&表2中的col1不是静态的,它针对每个用户动作而变化。根据电话,我将获得表2和表格1的col1需要使用table1的输出进行排序。

3 个答案:

答案 0 :(得分:1)

使用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

...将col1中的9作为第一条记录返回。

答案 1 :(得分:0)

不确定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

答案 2 :(得分:0)

为此,seriously需要在table2上使用sort列。只有表2中的ID 不够。您可以拥有记录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

这至少适用于小型表,只是因为size(table2)< size(table1)所以它按顺序收集,保留table2.col1上的filesort。