我有4个表,共有5列。我想获取这些表的最新前十行,并检索它们
我该怎么做?我尝试使用一个简单的联接命令,但我得到了20列,而不是5列!每个表都有自己的列名别名!但我想要的是,有一个5列的表格,其中包含所有前10名。
更新:
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
我怎么能做到这样的事?
在Oracle12c中,您可以使用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>
您可以使用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