2011-01-28 82 views
0

我有一个select语句返回5列:排序多个查询结果

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

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

我从表2的另一个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:第二表列1用于排序&是从表2表2的COL1未来不是一成不变的,它基于呼叫我会得到的COL1更改为每个用户操作&表2 &需要对table1的输出进行排序。

+0

更新问题以演示如何将表2合并,因为该示例非常明确,否则表2未被使用。 – 2011-01-28 01:10:11

+0

您有screen1,您可以在网页上移动网格,grid1,grid2,grid3等。它们的排序顺序存储在table2中,其中tabel1返回必须在表格2中存储的顺序网格上显示的网格信息。 – Sharpeye500 2011-01-28 01:30:19

回答

0

对于这个工作,你需要seriously表2上一个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 

这个工程至少在小桌子,只是因为尺寸(表2)<尺寸(表1),所以它收集的顺序,对保留的table2.col1文件排序。

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

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