如何使用预定义的一系列行对sql结果进行排序

时间:2009-09-02 08:44:14

标签: sql postgresql sorting

我有一张像这样的桌子:

--------------------------------
id | name
--------------------------------
1  | aa
2  | aa
3  | aa
4  | aa
5  | bb
6  | bb
... one million more ...

我希望在预定义序列中获取任意数量的行,并按名称排序其他行。例如在另一个表中,我有一个带有3个id的短序列:

sequ_no | id     | pos 
-----------------------
1       |  3     |  0
1       |  1     |  1
1       |  2     |  2
2       |  65535 |  0
2       |  45    |  1
... one million more ...

序列1定义了以下一系列id:[3,1,2]。如何按此顺序获取第一个表的三行,其余行按其名称asc排序? 如何在 PostgreSQL 中以及如何在 mySQL 中?如何在hql( hibernate查询语言)中找到解决方案?

我的想法是首先查询和排序序列中定义的行,然后连接不在序列中的其他行。但这涉及两个问题,可以用一个查询吗?

更新:样本序列[3,1,2](如上所述)的最终结果应如下所示:

id | name
----------------------------------
3  | aa
1  | aa
2  | aa
4  | aa
5  | bb
6  | bb
... one million more ... 

我需要这个查询通过产品表创建一个分页,其中产品的部分序列是定义的序列,其余的产品将按照我还不知道的条款进行排序。

2 个答案:

答案 0 :(得分:0)

一种方法:为每个没有位置的id分配一个位置(例如0),UNION将结果与第二个表一起,将结果与第一个表连接,并将ORDER BY seq_no,pos,name。

答案 1 :(得分:0)

我不确定我是否理解确切的要求,但这不会起作用:

SELECT ids.id, ids.name
FROM ids_table ids LEFT OUTER JOIN sequences_table seq
WHERE ids.id = seq.id
ORDER BY seq.sequ_no, seq.pos, ids.name, ids.id