【问题标题】:How to fetch top ten rows of different tables in oracle?如何在oracle中获取前十行不同的表?
【发布时间】:2014-12-22 07:57:10
【问题描述】:

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

我怎样才能做到这样的事情?

【问题讨论】:

  • 只是为了确保 - 您想要整体前 10 行,还是每个表的前 10 行?
  • 我想要整体前 10 行

标签: oracle select oracle12c


【解决方案1】:

在 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>

【讨论】:

  • 您需要订单中的最后一条记录吗?如果是,请按顺序使用DESC。在答案中查看我的更新。
  • 谢谢,但这会给我以 20,19,18 顺序的形式记录,而我希望它是 18,19,20。
  • 在外部查询中将order by ASC 添加到此结果集中。因此,20,19,18 将按升序排列为 18,19,20。如果这回答了您的问题,请将其标记为已回答。
【解决方案2】:

可以使用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

【讨论】:

  • 不会对数据库造成不好的影响吗?我的意思是 4 个人选择不是更好吗?
  • 如果你想让数据库过滤前十个结果,它必须在单个查询中。然而,值得注意的是,总前十名中的任何一行也必须在其自己的前十名中。可能值得将此过滤添加到每个单独的查询中,但您必须使用自己的数据对其进行基准测试,以查看它是否提高了性能。
猜你喜欢
  • 2019-04-13
  • 1970-01-01
  • 2012-04-03
  • 2019-02-01
  • 1970-01-01
  • 2014-01-23
  • 2016-10-25
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多