LIYUANWAI的gravatar头像
LIYUANWAI 2018-06-19 14:12:03

sql如何实现用户表查出所有上级?

一,我是通过office_id来查询所有上级部门单位,但是部门上面还有一级的时候就查不出来。sql如何实现用户表查出所有上级?

sql如何实现用户表查出所有上级?

谁能有方法可以查到上级所有部门,是不是还得建一个关联表

所有回答列表(12)
木鱼酱的gravatar头像
木鱼酱  LV5 2018年6月19日

不是十分明确意图,我理解的就是查你查出来这四个的上级部门?那不就是查他们的parent_id的部门就行了?

zxc123ldm的gravatar头像
zxc123ldm  LV7 2018年6月20日

public void s(){ ArrayList al=new ArrayList(); int a="select sys_offce.id from sys_offce,sys_user where sys_offce.id=sys_user.offce_id where sys_offce.id="+id; al.add(a); jkl(a,data); } public int jkl(int a,ArrayList data){ if(a!=0){//没有上级部门的设为0 int k="select parent_id from sys_offce where id="+a; data.add(k); jkl(k); } return 0; } 大概是这样吧 把sql语句变成方法一个就可以用了 先根据offce_id找到部门id这句应该可以省略直接传入offce_id也可以, 然后根据部门id找到部门的parent_id, 再把parent_id当成id来查找自己的parent_id知道parent_id为0就是根部门为止. 这里假设一个部门只有一个直属上级 sql语句没测试过可能字段有误

kisn888的gravatar头像
kisn888  LV14 2018年6月20日

你是想根据用户表的office_id,查询出部门表的所有部门,最后展示为 gaigeban1---专项小组-改革办,是这样的不

可以利用~START WITH CONNECT BY PRIOR 这个语法(oracle)

详见:https://jingyan.baidu.com/article/5d368d1e182bb93f60c05784.html

Smart_咚咚的gravatar头像
Smart_咚咚  LV13 2018年6月21日

为啥非要sql直接查  用代码递归查询不是会简单很多吗

汤圆儿的gravatar头像
汤圆儿  LV3 2018年6月21日

最好别把业务放到SQL中

橙子1的gravatar头像
橙子1  LV6 2018年6月22日

其实 可以写个 存储过程 或者 function 

然后把逻辑 递归逻辑 写进去

这个 数据库 不同 写法不同

你没说你是什么库 我就省点脑子 不乱猜了

至于 其他评论里让你在代码里实现的, 我觉得没毛病

但如果 数据库里能实现 ,用数据库 也没毛病

至于效率 这个还真没研究过 

感觉 数据量不大的话,效率应该差不了多少,没必要深究,会写那个,哪个写着溜,就用哪个

程序猿全敏的gravatar头像
程序猿全敏  LV29 2018年6月22日

通过parent_id

mySong的gravatar头像
mySong  LV11 2018年6月22日

看你这个表里 不是有个parent_ids 那个应该就是当前所有父节点的id 拿到这个后 你可以找打他所有的上级了(在用sql一次 in就可以了)

lonesafe的gravatar头像
lonesafe  LV11 2018年6月27日

递归查询,方法传入parentid   方法里面根据parentid查询上级 

yzcan的gravatar头像
yzcan  LV6 2018年6月29日

我是通过写存储过程实现的,采用递归查询,不管是查询所有的父节点还是所有的子节点都可以实现,代码直接调用存储过程直接就得到想要的结果了,简单粗暴。

别了不想说的gravatar头像
别了不想说  LV4 2018年7月3日

通过parent_ids查找,

select * from sys_office a 

left join sys_office b on b.id like conten('%',a.patent_ids,',%')

where a.id = ?

 

duduyan的gravatar头像
duduyan  LV11 2018年8月9日

mysql 有递归函数的,你可以试一下,但是一般写递归来实现的换性能不太好。数据量大容易卡死。建议可以把数据调整成有规律数据,然后用like来查询速度要快很多。

顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友