我有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
我怎样才能实现这样的目标?
答案 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>