【SQL】学习记录 【oracle递归】

【SQL】记录一下今天遇到的问题和解决方法

需求:上一篇sql查询的结果中,有些单位是不需要展示的,单位数据表里有个字段为是否启用,当这个单位禁用了,该单位以及子单位都不能展示出来。
表结构如下,需要用oracle递归查询禁用的单位以及子单位。
在这里插入图片描述
解决办法

select  * from TOP_ORGANIZATION 
start with STATE = '2'
CONNECT BY PRIOR ORG_ID = PARENT_ORG_ID

在这里插入图片描述

原文链接:https://www.cnblogs.com/Soprano/p/10659127.html

补充:2020年1月7日10:23:08

1 背景:现有设备分类表和作业标准两张表,每个设备分类下可能一个作业标准,即作业标准表有个字段指向设备分类表主键ID。
2 原需求:设备分类树显示的时候,如果该分类下有作业标准,则展示一个图标。
3 新需求:设备分类树节点本身有标准的,子节点有标准的,本身和子节点都有标准的,要显示不同的图片标识。
4 成果图
在这里插入图片描述
5 难点:因为分类树数据量多,所以要在一个SQL中查询所有节点和子节点信息,如果每个节点单独去查效率低,响应时间过长。
6 解决方案:查询结果作为条件查询的参数(第五行的AA.ID是第一行的查询结果),子查询用递归查出下级的标准数量

		SELECT AA.*, NVL(BB.COUNT, 0) COUNT, AA.ID CID,
				(SELECT COUNT(*) FROM DM_CLASSIFY C
				LEFT JOIN LIB_COMMON_WORK_STANDARD S ON S.CLASSIFY_ID = C.ID
				WHERE S.CLASSIFY_ID IS NOT NULL
				START WITH C.PARENT_CLASSIFY_ID = AA.ID
				CONNECT BY PRIOR C.ID = C.PARENT_CLASSIFY_ID) CCOUNT
		FROM (
		SELECT ex.TYPE, ex.MIN_UNIT_FLAG, ex.SPECIALITY, ex.NAME_RULE, dm.*
		FROM DM_CLASSIFY dm
		LEFT JOIN DM_CLASSIFY_EXTEND ex ON dm.id = ex.id
		ORDER BY dm.SORT_NO ASC
		) AA
		LEFT JOIN (
		SELECT COUNT(1) COUNT, S.CLASSIFY_ID CID
		FROM DM_CLASSIFY C
		LEFT JOIN LIB_COMMON_WORK_STANDARD S ON S.CLASSIFY_ID = C.ID
		WHERE S.STATUS != 'DELETED' AND S.STATUS != 'PUBLISH_APPROVE' AND S.STATUS != 'ABANDON_APPROVE'
		GROUP BY CLASSIFY_ID
		) BB ON AA.ID = BB.CID
发布了14 篇原创文章 · 获赞 1 · 访问量 265

猜你喜欢

转载自blog.csdn.net/qq_39938236/article/details/103185409
今日推荐