首页 > 解决方案 > 如何用 ORDER BY OR GROUP BY 表示树结构

问题描述

给定一个表'TEMPLATES'(具有列 ID、NAME、IS_MASTER、MASTER_ID 等),它描述了多个内容管理系统元素,例如母版、模板等。列 IS_MASTER 过滤主文档。我想过滤所有主文档和相关元素(文档),它们指向同一个表的“MASTER_ID”列上的主,但我想一个接一个地对行进行排序,例如在显示结果行之后master 应该列出指向这个 master 的元素(而不是像屏幕截图中那样混合所有行):

在此处输入图像描述

但是我只能这样做,我不知道如何订购或分组

SELECT x.*,x.ROWID FROM TEMPLATE x
WHERE IS_MASTER IN (1) OR MASTER_ID IS NOT NULL 

标签: sqloracle

解决方案


你可以这样做:

select *
from templates
order by nvl(master_id, id);

这将告诉数据库按 master_id 排序,如果该列为空 (NULL) 则使用 id。这样,主人和它的孩子就被排序在一起了。

或者,您可以使用分层查询:

select *
from templates
start with master_id is null
connect by master_id = prior id;

推荐阅读