簡體   English   中英

ORACLE-選擇具有不同多個列的ROWNUM

[英]ORACLE - Select ROWNUM with distinct multiple COLUMNS

嗨,我從Java應用程序調用SQL查詢,由於表中包含大量數據,因此需要花費很多時間從Java端進行處理。 現在我要按1000條記錄調用1000條

SELECT t1.col1,t1.col2,t2.col1,t2.col2 FROM(SELECT rownum AS rn,
t1.col1,
t1.col2,
t2.col1,
t2.col2 FROM table1 t1,
table2 t2 WHERE t1.id=t2.id) WHERE rn BETWEEN ? AND ?;

但是我還有一個查詢,它具有如下不同的值

 SELECT t1.col1,t1.col2,t2.col1,t2.col2 FROM(SELECT rownum AS rn,
distinct t1.col1,
t1.col2,
t2.col1,
t2.col2 FROM table1 t1,
table2 t2 WHERE t1.id=t2.id) WHERE rn BETWEEN ? AND ?;

但是此查詢給出了錯誤,不允許為不同的行添加行號AS rn。 請您能幫助我們解決上述用例嗎?

oracle數據庫中,僅在SELECT關鍵字后面或COUNT函數內部僅允許使用DISTINCT關鍵字。

此外,您的SQL會導致結果不一致,因為在oracle數據庫中,如果沒有顯式的ORDER BY子句,則無法保證記錄的順序。

您也無法通過內部選擇訪問tabla別名,因此,如果不同表中的列具有相同的列名,則必須應用列別名。

最好的解決方案是添加另一層嵌套選擇:

 SELECT t1_col1, t1_col2, t2_col1, t2_col2
   FROM (
    SELECT rownum AS rn, inner_tab.*
      FROM (
       SELECT distinct t1.col1 AS t1_col1,
                       t1.col2 AS t1_col2,
                       t2.col1 AS t2_col1,
                       t2.col2 AS t2_col2
         FROM table1 t1,
              table2 t2 
        WHERE t1.id=t2.id
      ORDER BY 1 -- you have to decide! 
     ) inner_tab
   ) WHERE rn BETWEEN ? AND ?;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM