--------------------------------
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 ...
我需要这个查询通过产品表创建一个分页,其中产品的部分序列是定义的序列,其余的产品将按照我还不知道的条款进行排序。
答案 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