查询递归表SQL,分类表查询,递归表数据结构转平级查询优化SQL

本文介绍如何使用SQL查询递归表数据,以平级结构展示包含父类信息。示例中展示了针对CATG_ID为1011的分类,获取其包括父类的ID、CD和NM,通过复杂的SQL语句实现路径的构建和转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

表字段:

CATG_ID, PAR_ID, CATG_NM,CATG_CD

CATG_ID

PAR_IDCATG_NMCATG_CD
1000电视/影音TV/VIO
10101000电视TV
101110104K超高清电视4K-TV

如何实现查询1011的id,cd和nm是包含父类的平级结构呢?

例如:{"ids":"1011,1010,1000","cds":"TV/VIO,TV,4K-TV","nms":"电视/影音,电视,4K超高清电视"}

查询某一分类的父层级信息,SQL如下:

SELECT
    @Pn := CATG_ID,
    CATG_CD,
    @pathId :=(
    SELECT
        GROUP_CONCAT(
            SUBSTRING_INDEX(
                @Pn := (
                SELECT
                    CONCAT( PAR_ID, '|', CATG_ID ) 
                FROM
                    tbl_pms_category 
                WHERE
                CATG_ID = SUBSTRING_INDEX( @Pn, '|', 1 )),
                '|',
                - 1 
            ) 
        ORDER BY
            CATG_ID DESC SEPARATOR ',' 
        ) 
    FROM
        tbl_pms_category 
    WHERE
        @Pn IS NOT NULL 
    ORDER BY
        CATG_ID ASC 
    ) AS PATH_IDS,
    @Pn1 := CATG_ID,
    @pathId :=(
    SELECT
        GROUP_CONCAT(
            SUBSTRING_INDEX(
                @Pn1 := (
                SELECT
                    CONCAT( PAR_ID, '|', CATG_CD ) 
                FROM
                    tbl_pms_category 
                WHERE
                CATG_ID = SUBSTRING_INDEX( @Pn1, '|', 1 )),
                '|',
                - 1 
            ) 
        ORDER BY
            CATG_ID DESC SEPARATOR ',' 
        ) 
    FROM
        tbl_pms_category 
    WHERE
        @Pn1 IS NOT NULL 
    ORDER BY
        CATG_ID ASC 
    ) AS PATH_CDS,
    @Pn2 := CATG_ID,
    @pathId :=(
    SELECT
        GROUP_CONCAT(
            SUBSTRING_INDEX(
                @Pn2 := (
                SELECT
                    CONCAT( PAR_ID, '|', CATG_NM ) 
                FROM
                    tbl_pms_category 
                WHERE
                CATG_ID = SUBSTRING_INDEX( @Pn2, '|', 1 )),
                '|',
                - 1 
            ) 
        ORDER BY
            CATG_ID DESC SEPARATOR ',' 
        ) 
    FROM
        tbl_pms_category 
    WHERE
        @Pn2 IS NOT NULL 
    ORDER BY
        CATG_ID ASC 
    ) AS PATH_NMS  
FROM
    tbl_pms_category;

过滤条件可根据实际需要自行添加;另外,SEPARATOR 后使用的分割符也可自行修改为“/”或其他。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值