繁体   English   中英

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

[英]Sort multiple query results in a single query

我有一条选择语句返回5列:

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表column1用于排序&来自表2。table2的col1不是静态的,它针对每个用户操作进行更改&基于调用,我将获得表2的col1并需要与table1的输出进行排序。

使用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作为返回的第一条记录。

不知道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

为此,您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上保留文件排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM