基于 MySQL 递归 CTE 实现表,父级id与子级id拼接

1、函数

xr_test.tb_content替换成自己的表

CREATE DEFINER=`root`@`%` FUNCTION `get_related_ids`(start_id BIGINT) RETURNS varchar(1000) CHARSET utf8mb4 COLLATE utf8mb4_general_ci
    DETERMINISTIC
BEGIN
    DECLARE result_ids VARCHAR(1000);

    -- 使用递归 CTE 查找所有相关的 id
    WITH RECURSIVE related_nodes AS (
        -- 初始查询:从起始节点开始
        SELECT id
        FROM xr_test.tb_content
        WHERE id = start_id AND is_deleted = 0

        UNION ALL

        -- 递归部分:查找子节点
        SELECT u.id
        FROM xr_test.tb_content u
        JOIN related_nodes rn ON u.parent_id = rn.id
        WHERE u.is_deleted = 0
    )
    -- 将查询结果的 id 用逗号连接起来
    SELECT GROUP_CONCAT(id)
    INTO result_ids
    FROM related_nodes;

    RETURN result_ids;
END

2、调用

-- 调用函数,传入起始节点的 id
SELECT get_related_ids(1892822043159773186) ids;

3、结果

基于 MySQL 递归 CTE 实现表,父级id与子级id拼接_第1张图片

你可能感兴趣的:(java,mysql,数据库)