[英]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.