如何在oracle中获取前十行不同的表?

时间:2014-10-27 07:00:36

标签: oracle select oracle12c

我有4个共有5列的表。我想获取这些表的最新前十行,并检索它们 我怎样才能做到这一点? 我尝试使用一个简单的连接命令,但不是5列我得到20列!每个表都有自己的列名别名!但我想要的是,有一个包含所有前十名的5列表。

更新

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

我怎样才能实现这样的目标?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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>