PostgreSQL 将父子表按照父子结构排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38779390/article/details/82877532

示例:

WITH RECURSIVE T ( yhlxid, yhlxtitle, yhlxpid, PATH, DEPTH, showindex ) AS (
	SELECT
		yhlxid,
		yhlxtitle,
		yhlxpid,
		'' || yhlxid :: VARCHAR AS PATH,
		1 AS DEPTH,
		showindex 
	FROM
		gc_curing_yhlx 
	WHERE
		1 = 1 
		AND yhlxtype = 'curing' UNION ALL
	SELECT
		D.yhlxid,
		D.yhlxtitle,
		D.yhlxpid,
		T.PATH || '/' || D.yhlxid,
		T.DEPTH + 1 AS DEPTH,
		D.showindex 
	FROM
		gc_curing_yhlx D
		JOIN T ON D.yhlxpid = T.yhlxid 
	) SELECT
	yhlxid,
	yhlxtitle,
	yhlxpid,
	PATH,
	DEPTH,
	showindex 
FROM
T 
ORDER BY
	PATH,
	showindex;

进阶,组合排序:

WITH RECURSIVE T ( yhlxid, yhlxtitle, yhlxpid, PATH, DEPTH, showindex ) AS (
	SELECT
		yhlxid,
		yhlxtitle,
		yhlxpid,
		'' || yhlxid :: VARCHAR AS PATH,
		1 AS DEPTH,
		showindex 
	FROM
		gc_curing_yhlx 
	WHERE
		1 = 1 
		AND yhlxtype = 'curing' UNION ALL
	SELECT
		D.yhlxid,
		D.yhlxtitle,
		D.yhlxpid,
		T.PATH || '/' || D.showindex || D.yhlxid,
		T.DEPTH + 1 AS DEPTH,
		D.showindex 
	FROM
		gc_curing_yhlx D
		JOIN T ON D.yhlxpid = T.yhlxid 
	) SELECT
	yhlxid,
	yhlxtitle,
	yhlxpid,
	PATH,
	DEPTH,
	showindex 
FROM
T 
ORDER BY
	PATH,
	showindex;

猜你喜欢

转载自blog.csdn.net/weixin_38779390/article/details/82877532