首页 > 其他分享 >递归查询

递归查询

时间:2023-10-28 11:33:40浏览次数:30  
标签:FinanClass typelevel 递归 查询 typename protypeid producttype id

有时候表结构是层级关系的父子结构,要查出所有有的子,可用如下的sql,递归查询,以mysql为例:

1、查出父下所有子

WITH RECURSIVE producttype AS(
    SELECT '03f9096d-bd5d-11ed-a58a-7af8c5058daf' FinanClass, id,protypeid,typename,typelevel FROM t_base_commontype WHERE id='03f9096d-bd5d-11ed-a58a-7af8c5058daf' 
    UNION ALL
    SELECT '03f9096d-bd5d-11ed-a58a-7af8c5058daf' FinanClass,a.id,a.protypeid,a.typename,a.typelevel FROM t_base_commontype AS a,producttype AS b WHERE a.id = b.protypeid 
    )
         SELECT * FROM producttype  

得到的结果如下:

 2、还可以把查询的结果插入到临时表:

 CREATE TABLE #temp_producttype
                                        (
                                            FinanClass VARCHAR(50) ,
                                            id VARCHAR(36) ,
                                            protypeid VARCHAR(36),
                                                                                        typename VARCHAR(50),
                                                                                        typelevel VARCHAR(10)
                                        );

WITH RECURSIVE producttype AS(
    SELECT '03f9096d-bd5d-11ed-a58a-7af8c5058daf' FinanClass, id,protypeid,typename,typelevel FROM t_base_commontype WHERE id='03f9096d-bd5d-11ed-a58a-7af8c5058daf' 
    UNION ALL
    SELECT '03f9096d-bd5d-11ed-a58a-7af8c5058daf' FinanClass,a.id,a.protypeid,a.typename,a.typelevel FROM t_base_commontype AS a,producttype AS b WHERE a.id = b.protypeid 
    )
        insert into #temp_producttype  SELECT * FROM producttype  

 

3、将查询出来的值进行行转列

WITH RECURSIVE producttype AS(
    SELECT '03f9096d-bd5d-11ed-a58a-7af8c5058daf' FinanClass, id,protypeid,typename,typelevel FROM t_base_commontype WHERE id='03f9096d-bd5d-11ed-a58a-7af8c5058daf' 
    UNION ALL
    SELECT '03f9096d-bd5d-11ed-a58a-7af8c5058daf' FinanClass,a.id,a.protypeid,a.typename,a.typelevel FROM t_base_commontype AS a,producttype AS b WHERE a.id = b.protypeid 
    )
         SELECT FinanClass, GROUP_CONCAT(typename SEPARATOR '-') FROM producttype  where protypeid <>'00000000-0000-0000-0000-000000000000'  GROUP BY FinanClass;

 

4、将查询出来行转成多列

WITH RECURSIVE producttype AS(
    SELECT '03f9096d-bd5d-11ed-a58a-7af8c5058daf' FinanClass, id,protypeid,typename,typelevel FROM t_base_commontype WHERE id='03f9096d-bd5d-11ed-a58a-7af8c5058daf' 
    UNION ALL
    SELECT '03f9096d-bd5d-11ed-a58a-7af8c5058daf' FinanClass,a.id,a.protypeid,a.typename,a.typelevel FROM t_base_commontype AS a,producttype AS b WHERE a.id = b.protypeid 
    )
        
        select t.FinanClass,max(t.一级) '一级',max(t.二级) '二级',max(t.三级) '三级',max(t.四级) '四级' from 
         (SELECT FinanClass, case when typelevel=1 then typename else  '' end as  '一级',
                        case when typelevel=2 then typename else  '' end as  '二级',
                                            case when typelevel=3 then typename else  '' end as  '三级',
                                            case when typelevel=4 then typename else  '' end as  '四级'
                                    
                            
                    
                    FROM producttype  where protypeid <>'00000000-0000-0000-0000-000000000000' ) t  group by t.FinanClass

 

标签:FinanClass,typelevel,递归,查询,typename,protypeid,producttype,id
From: https://www.cnblogs.com/zhengwei-cq/p/16400148.html

相关文章

  • javaweb--多表查询
    多表查询:从多张表中查询数据内连接:相当于查询A、B两张表的交集隐式连接:selectt1.name,t1.id,t2.dnamefromepmt1,deptt2whereepm.name=dept.id外连接:左外连接是查找A表所有数据和AB表的交集select*fromt1joint2ont1.id=t2.id左外连接是查找B表所有数据和AB表的......
  • linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档
    linux解压缩,复制,重命名,删除,目录按更新时间排序,grep递归搜索文档1.解压缩压缩命令zip-p-rmymail-1026.zipmymail/解压命令unzipmymail-1026.zip2.复制将文件file1复制到dir1目录下的file2文件cpfile1dir1/file2将文件夹source_dir复制到target_dir目前并且修改......
  • redshift DATE_TRUNC函数 查询日期上个月的26号到当前月的26号
    redshiftDATE_TRUNC函数查询日期上个月的26号到当前月的26号#redshift脚本#2023-08-0100:00:00.000selectDATE_TRUNC('month',current_date-INTERVAL'2month')#2023-08selectleft(DATE_TRUNC('month',current_date-INTERVAL'2month......
  • 基于ssm的四六级报名与成绩查询系统的设计与实现
    博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言,只有实实在在的写点程序。技术:ssm+mysql+jsp背景互联网发展至今,无论是其理论还是技术都已经成熟,而且它广......
  • mysql查询单天,当周,当月函数
    1、查询当天的数据select*from表名 whereTO_DAYS(时间字段)=TO_DAYS(NOW());2、查询当周的数据select*from表名 whereYEARWEEK(DATE_FORMAT(时间字段,'%Y-%m-%d'))=YEARWEEK(NOW());3、查询当月的数据select*from表名 whereDATE_FORMAT(时间字段,'%Y%m')=DATE_FORMA......
  • 创建用户供备库查询
    背景和目的:为不影响主库性能,创建一用户和视图只允许在备库访问。涉及视图中表较大,结构设计不合理,性能稍差。过程:创建视图、用户、授权、创建同义词、验证1、produser用户创建视图切换到g_tab等用户下altersessionsetcurrent_schema=produser;替换下面view的sql--createor......
  • ?Mybatis多表查询(1:1、1:N、N:N),MP多表查询(自定义SQL)
    Mybatis多表关联查询Gitee地址:https://gitee.com/zhang-zhixi/mybatis-tables-query.git数据表:oracleCREATETABLE"T_ORDER"("ID"NUMBERNOTNULL,"F_ORDER_TIME"DATE,"F_TOTAL"VARCHAR2(255BYTE),"F_USER_ID"NU......
  • javaweb--sql查询DQL
    基础查询别名selectmathas'数学成绩'english'英语成绩'fromstu条件查询几点注意事项1、null值的比较不能用=或者!=,只能使用isnull或者isnotnull2、可以使用betweenand来匹配一段数值whereagebetween20and303、<>和!=的作用相同4、or可以用数组的形式表示......
  • idea查询maven依赖情况
     ......
  • 浅析 es 查询文档的过程
    本文从一个示例入手,从代码层面分析elasticsearch查询文档的完整过程。新建索引cn-msg,设置3分片,1副本PUTlocalhost:9200/cn-msg{"settings":{"number_of_shards":3,"number_of_replicas":1}}写入文档POSTlocalhost:9200/cn-msg/_doc{"messag......