用 心 生 活 , 用 心 爱 你 😘|

DaenMax

园龄:3年7个月粉丝:52关注:0

oracle的递归写法:地区层级

前言

mysql的递归看我另一篇博文:https://www.cnblogs.com/daen/p/17252369.html

表结构

数据

查询子节点

示例

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

结果

不含自己的写法

加个不等于即可

查询父节点

示例

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

结果

不含自己的写法

加个不等于即可

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

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

多行合并一行

就是我输入一个地区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;

结果

本文作者:DaenMax

本文链接:https://www.cnblogs.com/daen/p/17252462.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   DaenMax  阅读(118)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起