0
点赞
收藏
分享

微信扫一扫

oracle的递归写法:地区层级

前言

mysql的递归看我另一篇博文:https://blog.51cto.com/u_16085431/6249592

表结构

oracle的递归写法:地区层级_数据查询

数据

oracle的递归写法:地区层级_子节点_02

查询子节点

示例

SELECT
	cx1.* 
FROM
	PHCP_CITY cx1 
WHERE
	cx1.IS_ENABLE = 1 START WITH cx1.CITY_CODE = '370100' CONNECT BY PRIOR cx1.CITY_CODE = cx1.PARENT_ID

结果

oracle的递归写法:地区层级_数据查询_03

不含自己的写法

加个不等于即可

oracle的递归写法:地区层级_子节点_04

查询父节点

示例

SELECT
	cx1.* 
FROM
	PHCP_CITY cx1 
WHERE
	cx1.IS_ENABLE = 1 START WITH cx1.CITY_CODE = '370112' CONNECT BY cx1.CITY_CODE = PRIOR cx1.PARENT_ID

结果

oracle的递归写法:地区层级_父节点_05

不含自己的写法

加个不等于即可

oracle的递归写法:地区层级_子节点_06

查询子节点和父节点的区别

其实就是将 PRIOR放到了PARENT_ID 前面而已

oracle的递归写法:地区层级_子节点_07

多行合并一行

就是我输入一个地区CODE,然后获取到他的所有的父级的名称,拼接成一个字符串

写法一

WITH temp AS (
	SELECT
		cx1.* 
	FROM
		PHCP_CITY cx1 
	WHERE
		cx1.IS_ENABLE = 1 START WITH cx1.CITY_CODE = '370112' CONNECT BY cx1.CITY_CODE = PRIOR cx1.PARENT_ID 
	) SELECT
	listagg ( CITY_NAME, '#' ) within GROUP ( ORDER BY IS_ENABLE, CITY_LEVEL ) AS brands 
FROM
	temp 
GROUP BY
	IS_ENABLE;

写法二

SELECT
	listagg ( CITY_NAME, '#' ) within GROUP ( ORDER BY IS_ENABLE, CITY_LEVEL ) AS brands 
FROM
	(
	SELECT
		cx1.CITY_CODE,
		CITY_NAME,
		IS_ENABLE,
		CITY_LEVEL 
	FROM
		PHCP_CITY cx1 
	WHERE
		cx1.IS_ENABLE = 1 START WITH cx1.CITY_CODE = '370112' CONNECT BY cx1.CITY_CODE = PRIOR cx1.PARENT_ID 
	ORDER BY
		CITY_LEVEL 
	) 
GROUP BY
	IS_ENABLE;

结果

oracle的递归写法:地区层级_父节点_08

举报

相关推荐

0 条评论