很感谢大神进来。
我下面代码有个问题。要一直持续 循环下去。 不知道怎么写了。 这个我只写到了5级。 但实际情况可能有20级感谢大神帮我解决下啊。谢谢。
SELECT id,hhr_name,parent_id,tjr_id FROM gbi_hhr WHERE id = 90 OR 
id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') )OR
id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') )) )OR 
id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') )) ) )OR 
id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE sf_type != '战略' AND tjr_id IN (SELECT id FROM gbi_hhr WHERE id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') ))) ) )

解决方案 »

  1.   

    @stelf 感谢你的回答。 递归 怎么写。可以给我个 示例代码吗。 谢谢。 刚刚学这个。不太懂。
      

  2.   

    你这个代码设计思路有严重问题,五级是啥概念,你算一下:假设你有100条记录符合那要执行100x100x100x100x100次。不明白你的思路是啥。帮你简化第二段:id IN ((SELECT id FROM gbi_hhr WHERE tjr_id = 90 AND sf_type ='战略') )这条可以简化为:tjr_id = 90 AND sf_type ='战略'其他的你自己弄嘛。
      

  3.   

    mysql不支持递归类型的查询语句,只能编函数给你个函数例子:
    DROP FUNCTION IF EXISTS queryChildrenAreaInfo;
    CREATE FUNCTION queryChildrenAreaInfo(areaId INT)
    RETURNS VARCHAR(4000)
    BEGIN
    DECLARE sTemp VARCHAR(4000);
    DECLARE sTempChd VARCHAR(4000);SET sTemp='$';
    SET sTempChd = CAST(areaId AS CHAR);WHILE sTempChd IS NOT NULL DO
    SET sTemp= CONCAT(sTemp,',',sTempChd);
    SELECT GROUP_CONCAT(id) INTO sTempChd FROM t_areainfo WHERE FIND_IN_SET(parentId,sTempChd)>0;
    END WHILE;
    RETURN sTemp;
    END;