sql递归查出某个值下的所有子集数据

一、mapper层

List<Long> selectListById(@Param "grpId") String grpId);

二、xml层

<select id="selectListById" resultType="java.lang.Long">
      WITH RECURSIVE subordinates AS (
          SELECT id,str01,tenant_id
          FROM cloud_base_person
          WHERE str01 = #{grpId}
          UNION ALL
          SELECT t.id, t.str01, t.tenant_id
          FROM cloud_base_persont
          INNER JOIN subordinates s ON t.str01 = s.id
          WHERE t.deleted != '1' AND t.tenant_id = s.tenant_id
      )
      SELECT id FROM subordinates;
</select>

三、实践

查某一部门下的全部user信息

<select id="getUserPageByDeptId" resultType="cn.iocoder.yudao.vo.APPUserInfoPage">
        WITH RECURSIVE dept_cte AS (
            SELECT
            id,
            name,
            parent_id
            FROM
            system_dept
            WHERE
            id = #{deptId} AND deleted != '1'

            UNION ALL

            SELECT
            d.id,
            d.name,
            d.parent_id
            FROM
            system_dept d
            INNER JOIN
            dept_cte cte ON d.parent_id = cte.id
            WHERE
            d.deleted != '1'
        )
        
        SELECT
        u.id,
        u.nickname,
        d.id AS deptId,
        d.name AS deptName
        FROM
        system_users u
        LEFT JOIN
        dept_cte d ON u.dept_id = d.id
        WHERE
        u.deleted != '1'

        <if test="nickName != null and nickName != ''">
            AND u.nickname LIKE CONCAT('%', #{nickName}, '%')
        </if>
        ORDER BY
        u.nickname ASC;
    </select>


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值