我有一个返回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的输出进行排序。
答案 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。