我有2列在一对多的关系。我想对“许多”进行排序并返回“one”的第一个出现。我需要翻阅数据,例如,我需要能够获得第三组10个唯一的“一个”值。在Oracle中,如何从排序结果中获取不同值的页面?
我有这样的查询:
SELECT id, name
FROM table1
INNER JOIN table2 ON table2.fkid = table1.id
ORDER BY name, id;
可以有表2为表1中的每一行多行。
我的查询看起来像这样的结果:
id | name
----------------
2 | apple
23 | banana
77 | cranberry
23 | dark chocolate
8 | egg
2 | yak
19 | zebra
我需要翻阅结果与包含n 独特 IDS每个页面设置。例如,如果启动= 1和N = 4我想回去
2
23
77
8
在自己被划分成上(即名称),其中ID是在其第一次出现的位置返回的顺序。同样,如果开始= 3和n = 4,为了=降序我想
8
23
77
2
我尝试这样做:
SELECT * FROM (
SELECT id, ROWNUM rnum FROM (
SELECT DISTINCT id FROM (
SELECT id, name
FROM table1
INNER JOIN table2 ON table2.fkid = table1.id
ORDER BY name, id)
WHERE ROWNUM <= 4)
WHERE rnum >=1)
这给了我的ID数字顺序,而不是有序的名称将是。
我也试过:
SELECT * FROM (
SELECT DISTINCT id, ROWNUM rnum FROM (
SELECT id FROM (
SELECT id, name
FROM table1
INNER JOIN table2 ON table2.fkid = table1.id
ORDER BY name, id)
WHERE ROWNUM <= 4)
WHERE rnum >=1)
但是这给了我重复值。
如何翻阅此数据的结果?我只需要这个ID,没有什么来自“多”表。
更新
我想我得到与改变我的内部查询接近
SELECT id, name, rank() over (order by name, id)
FROM table1
INNER JOIN table2 ON table2.fkid = table1.id
...但我仍然得到重复的ID。
如果您需要为结果分页,您的应用程序的搜索功能可能会中断。阅读Jeff Atwood最近的这篇博客(这个教区的晚期):http://www.codinghorror.com/blog/2012/03/the-end-of-pagination.html – APC 2012-03-30 22:26:11
感谢您的链接;这是一个有趣的阅读。但是,我没有显示搜索结果。显示的数据量是有限的,数量取决于用户的角色。它有时不止应该放在单个页面上(或者放在JavaScript组件中),尽管我计划在我有时间重新制作UI时转为连续滚动。 – Paul 2012-03-31 01:02:20