2012-09-03 41 views
1

Possible Duplicate:
How do I limit the number of rows returned by an Oracle query after ordering?如何實現Oracle查詢限制或分頁

我使用就像下面的查詢:

SELECT url, title, metadesc FROM (
     SELECT url,title, metadesc, rownum rn FROM (
       SELECT url, title, metadesc FROM web 
      ) 
      WHERE rownum <= 60 
    ) 
    WHERE rn > 50 

它工作正常,單表,但在我的主查詢,如果不加入 即

SELECT name, id, url, title, metadesc 
FROM web, emp 

然後它給了我錯誤:

java.sql.SQLException: ORA-00918: column ambiguously defined 
+2

請參閱:http://stackoverflow.com/questions/470542/how-do-i-limit-the-number-of-rows-returned-by-an-oracle-query-after-ordering? rq = 1 – esmoreno

+0

從Oracle 12cR1開始,你可以使用'OFFSET'和'FETCH NEXT n ROWS':http://stackoverflow.com/a/26051830/1461424 – Krumia

回答

1

二者必選其一別名:

SELECT e.name, e.id, w.url, w.title, w.metadesc 
    FROM web w 
    JOIN emp e ON w.xx = e.yy 

或全表名(更詳細):

SELECT emp .name, emp .id, web.url, web.title, web.metadesc 
    FROM web 
    JOIN emp ON web.xx = emp .yy 

如果一個子查詢返回具有相同名稱的兩列,你不能做一個SELECT *

SQL> SELECT * FROM (
    2  SELECT d1.dummy, d2.dummy 
    3  FROM dual d1, dual d2 
    4 ); 

ERROR at line 1: 
ORA-00918: column ambiguously defined 

在這種情況下,在子查詢中使用別名不同的列名:

SQL> SELECT * FROM (
    2  SELECT d1.dummy dummy_d1, d2.dummy dummy_d2 
    3  FROM dual d1, dual d2 
    4 ); 

D D 
- - 
X X 
+0

非常感謝Vincent Malgrat的作品 但它需要很多時間 有沒有其他的方法來實現分頁在oracle ????? – Pravin

+0

這將是一個優化問題。我沒有足夠的數據來回答。我建議你用你的表和他們的數據以及你的查詢和優化器計劃來創建一個新的問題。 –