【发布时间】:2021-11-22 12:22:53
【问题描述】:
考虑下表:
| employer_id | supervisor_employer_ref | date_hired |
|---|---|---|
| 22436 | NULL | 01/02/2006 |
| 37854 | 25558 | 07/12/2018 |
| 25558 | NULL | 10/16/2010 |
| 48796 | 25558 | 11/11/2015 |
| 28449 | 22436 | 08/14/2016 |
| 34663 | 25558 | 10/10/2019 |
| 45687 | 22436 | 04/12/2020 |
出于某种特定原因,我必须由雇主订购此表,然后由其受监管的雇主订购,并在 Oracle 12c 数据库上按 date_hired 订购。 我知道这不是创建数据库的最理想方式,但出于特定原因,我必须保持这种方式。
预期结果:
| employer_id | supervisor_employer_ref | date_hired |
|---|---|---|
| 22436 | NULL | 01/02/2006 |
| 28449 | 22436 | 08/14/2016 |
| 45687 | 22436 | 04/12/2020 |
| 25558 | NULL | 10/16/2010 |
| 48796 | 25558 | 11/11/2015 |
| 37854 | 25558 | 07/12/2018 |
| 34663 | 25558 | 10/10/2019 |
| 45687 | 22436 | 04/12/2020 |
【问题讨论】:
-
这是一个层次表,所以需要递归查询。你走了多远?你被困在哪里了?请出示您的疑问并告诉我们您自己未能解决的任务的哪一部分。
-
现在我只做了类似 SELECT A.*, rownum r FROM employees ORDER BY supervisor_employer_ref, date_hired 我不知道从这里去哪里
-
这几乎没有。查找如何编写递归查询。例如:oracle-base.com/articles/11g/recursive-subquery-factoring-11gr2。您需要它来查询像您这样的分层数据。然后看看你能走多远,然后带着一个具体的问题回来。
-
@ThorstenKettner - 在 Oracle 中,查询分层表的最常用方法是使用 分层 查询,使用
connect by和相关功能,不是 使用递归查询。分层查询可能被证明要快很多倍(因为它们要做的工作更少,并且它们已被 Oracle 显着优化,因为它们自 Oracle 版本 1 以来就存在)。 -
@mathguy:我也考虑这些递归查询。只是语法不同。我发布的链接中也对它们进行了说明。