sql - 如何用 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
解决方案
你可以这样做:
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;
推荐阅读
- laravel - 此集合实例上不存在属性 [国家]
- android - 在 Flutter 生产应用程序中的行为不符合预期
- c++ - 初级 C++ 数组
- javascript - GSAP 和 ReactJs。控制台警告:未找到未定义的 GSAP 目标。& 未找到 GSAP 目标
- swagger - Swagger OpenApi3中不同的requestBody正确方法
- pyenchant - ImportError:未找到“附魔”C 库,可能需要安装
- flutter - 如何将特定链接重定向到您的应用,类似于 whatsapp
- python - scrapyd-deploy 不部署项目?蟒蛇爬虫
- android-studio - 为什么我的 textview 在设置文本时不创建换行符,即使使用了 \n?
- android - 为android mainactivity添加电容语音识别