我有一张包含“团队”信息的表格。团队可以有子团队 - 每个子行都有一个“parent_id”列,其中包含该子团队父母的“team_id”。以下是数据的示例:
team_id team_name parent_id
1 sales (null)
2 executives (null)
3 emea sales 1
4 apac sales 1
5 uk sales 3
我想要实现的只是按照team_id的顺序选择表格中的所有行,但我想要在他们的父团队之后立即返回子团队,也是在team_id顺序中。因此,对于上面的示例数据,我希望按此顺序返回数据:
team_id team_name parent_id
1 sales (null)
3 emea sales 1
5 uk sales 3
4 apac sales 1
2 executives (null)
我花了几个小时想知道如何实现这一点,并且真的没有提出任何有用的东西!我会很感激如何处理这个问题。
请注意,我正在使用现有项目,无法真正进行大量的数据库/实施更改。我正在使用PHP和Oracle来使用存储过程,这对我来说是新的。
答案 0 :(得分:2)
您可以使用ORDER SIBLINGS BY
子句的分层查询,如下所示:
WITH teams AS (SELECT 1 team_id, 'sales' team_name, NULL parent_id FROM dual UNION ALL
SELECT 2 team_id, 'executives' team_name, NULL parent_id FROM dual UNION ALL
SELECT 3 team_id, 'emea sales' team_name, 1 parent_id FROM dual UNION ALL
SELECT 4 team_id, 'apac sales' team_name, 1 parent_id FROM dual UNION ALL
SELECT 5 team_id, 'uk sales' team_name, 3 parent_id FROM dual)
SELECT team_id,
team_name,
parent_id
FROM teams
CONNECT BY PRIOR team_id = parent_id
START WITH parent_id IS NULL
ORDER SIBLINGS BY team_id;
TEAM_ID TEAM_NAME PARENT_ID
---------- ---------- ----------
1 sales
3 emea sales 1
5 uk sales 3
4 apac sales 1
2 executives