RT 像这么一张表的级联,这时候我删除广东省的话 ,就要把广东省下面的如广州市,荔湾区,越秀区.....这些全删掉,也包括广东下面其他市和县都要删掉,想了很久、如果只是删他的下级的话、还是很容易的、一条SQL就行、但是如果要删三级呢?同事说用递归、想了很久都不会、也搜索了全网、都没有找到、有大佬知道怎么写吗、谢谢。(当然实际上不是这张表,用这张表只是觉得比较经典,大家一看就明白)
2条回答 默认 最新
关注 下面是一个递归查询某个 area_id 对应的所有子节点的递归函数,它会返回一个数组,然后用 IN 条件来删除,可以试试:
-- 自定义函数查询子节点 delimiter $$ create function `getChildLst`(`rootId` varchar(64)) returns varchar(1000) BEGIN DECLARE sTemp VARCHAR(1000); DECLARE sTempChd VARCHAR(1000); SET sTemp = '$'; SET sTempChd = rootId; WHILE sTempChd is not null DO SET sTemp = concat(sTemp,',',sTempChd); SELECT group_concat(area_id) INTO sTempChd FROM t_area where FIND_IN_SET(pid,sTempChd)>0; END WHILE; RETURN sTemp; END $$ delimiter ;
说明:这是分组递归查询的函数,参数为当前顶级groupId
使用: select g2.area_id from t_area g2 where find_in_set(g2.area_ID, getChildLst(#{groupId}));
该sql可以返回此groupId和以此groupId为根节点的所有结点解决 无用评论 打赏 举报
悬赏问题
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题
- ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
- ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
- ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
- ¥50 成都蓉城足球俱乐部小程序抢票
- ¥15 yolov7训练自己的数据集
- ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
- ¥15 电力市场出清matlab yalmip kkt 双层优化问题
- ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)