如何使用ORDER BY/GROUP BY实现TEMPLATES表树结构父子关联排序
实现方案
你只需要在原有查询基础上添加ORDER BY逻辑即可,核心思路是先按所属主文档ID分组,再按文档类型排序保证主文档排在同组最前,两层排序就能实现你要的效果。
修改后的完整查询语句如下:
SELECT x.*,x.ROWID FROM TEMPLATE x WHERE IS_MASTER = 1 OR MASTER_ID IS NOT NULL ORDER BY -- 第一排序维度:将同一主文档及其附属划分到同一排序组 CASE WHEN IS_MASTER = 1 THEN ID ELSE MASTER_ID END, -- 第二排序维度:同组内主文档优先展示 IS_MASTER DESC -- 若需要附属元素内部按规则排序,可在此追加字段,例如按ID升序:, ID ASC
逻辑说明
- 第一层排序用
CASE表达式生成分组键:主文档取自身ID作为分组键,附属元素取MASTER_ID作为分组键,这样所有关联同一个主文档的记录都会被分到同一排序区间 - 第二层排序用
IS_MASTER倒序,取值为1的主文档自然会排在同组取值为0的附属元素前面 - 该写法兼容所有主流关系型数据库(MySQL、Oracle、SQL Server、PostgreSQL等),如果你的场景还有超过两层的嵌套层级,可以再补充递归CTE逻辑实现
内容的提问来源于stack exchange,提问作者user615993
相关产品推荐
相关产品推荐

