递归查询北京市下面所有城市
使用函数的方式进行递归查询出北京市及以下所有城市信息,参考结果如下(北京市ID:110000):
ID | NAME | PID |
---|---|---|
110000 | 北京市 | 0 |
110100 | 东城区 | 110000 |
110200 | 西城区 | 110000 |
110500 | 朝阳区 | 110000 |
110600 | 丰台区 | 110000 |
110700 | 石景山区 | 110000 |
110800 | 海淀区 | 110000 |
110900 | 门头沟区 | 110000 |
111100 | 房山区 | 110000 |
111200 | 通州区 | 110000 |
111300 | 顺义区 | 110000 |
111400 | 昌平区 | 110000 |
111500 | 大兴区 | 110000 |
111600 | 怀柔区 | 110000 |
111700 | 平谷区 | 110000 |
112800 | 密云县 | 110000 |
112900 | 延庆县 | 110000 |
参考答案:
- 创建函数
CREATE DEFINER=`root`@`localhost` FUNCTION `getChildList`(rootId INT) RETURNS varchar(1000) CHARSET utf8mb4
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd VARCHAR(1000);
SET sTemp = '$';
SET sTempChd =cast(rootId as CHAR);
WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd);
SELECT group_concat(id) INTO sTempChd FROM china where FIND_IN_SET(pid,sTempChd)>0;
END WHILE;
RETURN sTemp;
END
- 执行SQL
select * from china where FIND_IN_SET(id,getChildList(110000));