oracle sql 查询 请教个问题

WeirdBIrd 发布于 2013/08/23 18:53
阅读 203
收藏 0


我现在的结果是这样的: select  tmp.org_id   from  tmp (事实 是不可能这么简单的,我这里是10多张表查出来组合的临时表,)  ,我现在就是需要对结果 tmp.orgid 进行过滤


一个 sql  不知道 如何进行判断了

我先说说 要查询的条件

组织关系表(sys_org): 组织关系(org_id), 父级组织id (parent_id) ;

我现在 界面上 的组织关系选择可以有3个 选择。

界面的布局:

也就是根据组织关系的选择 进行tmp.org_id 的过滤

创建组织: 就是 org_id  

组织关系选择 : 1 本组织 ,2 下级组织 , 3 本组及其下级组织

选择1的时候 : 就是  组织关系表sys_org 的  org_id

选择2 的时候:  就是 组织关系表sys_org 里面  parent_id 的所有 org_id  :

select so.org_id  from  sys_org so  where so.parent_id
 


选择3 的时候:  获取它自己的组织org_id 及其所有下级的所有组织的org_id( 这里要注意的是,假如下级组织还存在下级组织,那么这个下级组织的下级组织org_id 也要被查出来,也就是说一个递归(若下下级组织还有 下级组织也要被查出来 ) )   --我擦,咋觉得这么绕口..


我 sql  里面可以获取到 页面传递过来的 创建组织关系id(org_id),组织关系选择 org_choice (1,2,3 三个选项)



where tmp.org_id in(
      case when 1= org_choice  then {org_id}
           when  2=org_choice then (select so.org_id from sys_org so where so.parent_org_id=org_id)
           when 3=org_choice  then (select org_id(界面传递过来的本组织), so.org_id from sys_org so where so.parent_org_id=org_id) 
     
          )
我现在想的这个方案是错误的(in 里面嵌套case when 是错误的解决办法 )。。所以请各位给个思路

我想把它封装 成一个函数,该怎么弄呢?


谢谢各位赐教


加载中
0
铂金胖子
铂金胖子

oracle 的递归,试试:

select so.org_id  from  sys_org so 
START WITH org_id = 1
CONNECT BY PRIOR org_id = parent_id

铂金胖子
铂金胖子
回复 @晓骏 : 你可以直接 in ( select org_id from sys_org .... )
WeirdBIrd
WeirdBIrd
回复 @铂金胖子 : wmsys.wm_concat() 搞定了,3Q
WeirdBIrd
WeirdBIrd
回复 @铂金胖子 : 就比如说,查询来的列,以逗号分割 in(1,2,3,4,5)
铂金胖子
铂金胖子
回复 @晓骏 : 没看到啥意思。举个例子吧。
WeirdBIrd
WeirdBIrd
因为in() ,查询出来的字段 还要以逗号进行分割。 这个 要怎么做呢?
0
WeirdBIrd
WeirdBIrd

@Rayn-瑞恩恩恩恩

0
Ryan-瑞恩
Ryan-瑞恩
union 试试。。。
0
宏哥
宏哥
楼上的就是正确答案
0
mark35
mark35

选择3 的时候: 获取它自己的组织org_id 及其所有下级的所有组织的org_id( 这里要注意的是,假如下级组织还存在下级组织,那么这个下级组织的下级组织org_id 也要被查出来,也就是说一个递归(若下下级组织还有 下级组织也要被查出来 ) ) --我擦,咋觉得这么绕口..
可以考虑换个办法,不用递归一次性读取所有结果,而是用ajax动态读取创建下级select


返回顶部
顶部