比如一个表
id name parentId
1 a 0
2 b 4
3 c 1
4 d 0
5 e 6
6 f 0
7 g 1
我想要的结果是:
id name parentId
1 a 0
3 c 1
7 g 1
4 d 0
2 b 4
6 f 0
5 e 6
备注:1、只有一级结构 每个根节点只有子节点,不会有孙子节点
2、不要用函数、存储过程之类的
------解决思路----------------------
用一个特殊的排序语句即可
order by case when parentid=0 then id*1000000 else parentid*1000000+id end
------解决思路----------------------
SELECT * FROM TB如果有孙节点,可以用CTE递归一下,再排序
ORDER BY CASE WHEN parentId=0 THEN id ELSE parentId END,parentId,ID
------解决思路----------------------
WITH t1 AS ( -- 第一级
SELECT *,
id AS topid
FROM table1
WHERE parentid = 0
)
,t2 AS ( -- 第二级
SELECT table1.*,
t1.id AS topid
FROM t1
JOIN table1
ON t1.id = table1.parntid
)
SELECT id, name, parentid
FROM (SELECT * FROM t1
UNION ALL
SELECT * FROM t2
) t
ORDER BY topid, id