sql语句

数据库表task里面有id 和parentid,还有层级,当parentid不为空的时候,说明有子项。如何循环取出子项。下面我想用with as  这个写法循环查出。报错。

https://wenku.baidu.com/view/7bd87bc9e309581b6bd97f19227916888486b992.html这个直接拿过来改变一下表名和字段也是宝这样的错误

with py_sd as 

(

select   id,parentid , level_n from A  where level_n ='1'

union all 

select   prj.id,prj.parentid , level_n+1 from py_sd c inner join  A prj on  c.id =  prj.parentid 

)

insert overwrite table oa.withtest

select id,parentid , level_n from py_sd tf

image.png

重庆一棵草 发布于 2022-5-11 17:28 (编辑于 2022-5-12 10:39)
1min目标场景问卷 立即参与
回答问题
悬赏:10 F币 4人赏过 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
重庆一棵草Lv4中级互助
发布于2022-5-12 15:06

with py_sd as 

(

select   id,parentid , level_n from A  where level_n ='1'

union all 

select   prj.id,prj.parentid , level_n+1 from A c inner join  A prj on  c.id =  prj.parentid 

)

insert overwrite table oa.withtest

select id,parentid , level_n from py_sd tf

最佳回答
0
shixyLv5见习互助
发布于2022-5-12 09:31(编辑于 2022-5-12 09:33)

看你有几个层级关系了,给你举例个四个层级的求法吧:(如果想层级名称没有的就用前一级的层级名称可以用COALESCE函数)

menu_level 表示的是层级ID,tableName表示表名,menu_name表示层级名称

SQL如下:

SELECT

"一级菜单",

"二级菜单",

"三级菜单",

"四级菜单" 

FROM

( SELECT ID, menu_name AS "一级菜单", parent_id FROM tableName WHERE menu_level = 0 )

A LEFT JOIN ( SELECT ID, menu_name AS "二级菜单", parent_id FROM tableName WHERE menu_level = 1 ) b ON A.ID = b.parent_id

LEFT JOIN ( SELECT ID, menu_name AS "三级菜单", parent_id FROM tableName WHERE menu_level = 2 ) C ON b.ID = C.parent_id

LEFT JOIN ( SELECT ID, menu_name AS "四级菜单", parent_id FROM tableName WHERE menu_level = 3 ) d ON C.ID = d.parent_id

  • 1关注人数
  • 410浏览人数
  • 最后回答于:2022-5-12 15:06
    请选择关闭问题的原因
    确定 取消
    返回顶部