2014-10-27 50 views
2

我有4個表共有5列。我想獲取這些表格的最新整體前十行,並檢索它們。
我該怎麼做? 我試過使用一個簡單的連接命令,而不是5列,我得到20列!每個表都有自己的列名別名!但我想要的是,有一個包含所有前10名的5列表。如何在oracle中獲取前十行不同的表?

更新:

fetch FIRST 10 ROWS ONLY 

命令返回10第一條記錄,而不是最新的人 當我運行例如下面的命令:

select * from tblTest order by ID FETCH First 3 ROWS Only; 

我得到

1 Ali 
2 Jacob 
3 Chris 

我真正需要的地方

18 Fatima 
19 Mary 
20 Catherina 

我該如何做到這樣的事情?

+0

只是爲了確保 - 你想要整個前10行還是每個表的前10位? – Mureinik 2014-10-27 07:03:02

+0

我想整體前10排 – Breeze 2014-10-27 07:07:55

回答

3

在Oracle 12c中,你可以使用TOP-N查詢:

SQL> select * from(
    2 (select deptno from emp 
    3 ORDER BY deptno 
    4 fetch FIRST 10 ROWS ONLY) 
    5 UNION all 
    6 (select deptno from emp 
    7 ORDER BY deptno 
    8 fetch FIRST 10 ROWS ONLY) 
    9 ) 
10/

    DEPTNO 
---------- 
     10 
     10 
     10 
     20 
     20 
     20 
     20 
     20 
     30 
     30 
     10 

    DEPTNO 
---------- 
     10 
     10 
     20 
     20 
     20 
     20 
     20 
     30 
     30 

20 rows selected. 

不像ROWNUM,你不必擔心ORDER

更新至於要想在順序

使用DESC最後一個記錄。

SQL> SELECT * 
    2 FROM(
    3 (SELECT deptno FROM emp ORDER BY deptno DESC 
    4 FETCH FIRST 3 ROWS ONLY 
    5 ) 
    6 UNION ALL 
    7 (SELECT deptno FROM emp ORDER BY deptno DESC 
    8 FETCH FIRST 3 ROWS ONLY 
    9 )) 
10/

    DEPTNO 
---------- 
     30 
     30 
     30 
     30 
     30 
     30 

6 rows selected. 

SQL> 
+0

更新了這個問題。 – Breeze 2014-10-27 10:06:27

+0

您是否需要訂單中的最後記錄?如果是,請按順序使用「DESC」。看到我的更新回答。 – 2014-10-27 13:56:33

+0

謝謝,但這會給我20,19,18順序的形式的記錄,而我希望它是18,19,20。 – Breeze 2014-10-27 18:50:10

3

您可以使用union all把所有的行連續,然後取前10:

SELECT col1, col2, col3, col4, col5 
FROM (SELECT col1, col2, col3, col4, col5 
     FROM (SELECT col1, col2, col3, col4, col5 FROM table1 
       UNION ALL 
       SELECT col1, col2, col3, col4, col5 FROM table2 
       UNION ALL 
       SELECT col1, col2, col3, col4, col5 FROM table3 
       UNION ALL 
       SELECT col1, col2, col3, col4, col5 FROM table4) 
     ORDER BY col1, col2, col3, col4, col5) 
WHERE rownum <= 10 
+0

它不會對數據庫造成不良影響嗎?我的意思是不會4個人選擇更好? – Breeze 2014-10-27 07:12:50

+0

如果您希望數據庫過濾前十個結果,它必須位於單個查詢中。不過值得注意的是,前十名中的任何一排都必須進入前十名。對每個單獨的查詢添加此過濾可能是值得的,但是您必須將其與您自己的數據進行基準比較,以查看它是否可以提高性能。 – Mureinik 2014-10-27 07:15:13

+0

非常感謝你 – Breeze 2014-10-28 04:49:32

相關問題