2009-09-02 23 views
0

我有這樣一個表:如何使用預先定義的一系列行進行排序SQL結果

-------------------------------- 
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]。如何按照這個順序獲得第一個表的三行,以及按照它們的名字順序排列的其餘行? 如何在PostgreSQL以及如何在mySQL? hql中的解決方案看起來如何(hibernate查詢語言)?

我有一個想法是首先查詢和排序在序列中定義的行,而不是排序在序列中的其他行。但這涉及到兩個疑問,可以用一個來完成嗎?

更新:用於樣品序列的最終結果[3,1,2](如上定義的)應該是這樣的:

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

我需要此查詢通過產品來創建一個分頁表中產品序列的一部分是一個定義的序列,其餘的產品將由我還不知道的條款訂購。

回答

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 
+0

序列表犯規包含每pdoruct,只是其中的幾個。也許20個500.000 – Chris 2009-09-02 09:00:00

+0

更改爲左外連接。同樣,我不是100%滿足您的要求。你能舉個例子說明你期望輸出是怎樣的嗎?你想限制到一個序列?或者按序列號排序一切? – 2009-09-02 09:01:29

0

一種方法:爲每個沒有位置的ID分配一個位置(例如0),將結果與第二個表進行聯合,將結果與第一個表進行聯接,並將ORDER BY與seq_no,pos,name 。

相關問題