交叉机构SQL问题,一个用户对应多个机构

JavaAlpha 2015-03-17 06:01:31
如题:客户提出一个用户可以属于多个机构,拥有多个机构的权限。
现在数据库查询遇到了对应问题,把多个机构的ID放到了一个字段里面了。
如图:


...全文
772 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
用instr函数,关联的时候这样写: select ... from 中间表 a, 机构表 b, 用户表 c where instr(a.service_unit,b.id) > 0 and c.id = a.id
jdsnhan 2015-03-19
  • 打赏
  • 举报
回复
可以考虑用正则,将中间表的多个机构转化成习惯性的单列值,再匹配查询。
SQL> select * from emp;
 
ID         NAME
---------- ----------
2          李四
1          张三
 
SQL> select * from org;
 
ID         NAME
---------- ----------
1          部门1
2          部门2
3          部门3
4          部门4
 
SQL> select * from emp_org;
 
EMPID      ORGID
---------- --------------------------------------------------------------------------------
1          1,3,4
2          1,2,3,4
 
SQL> 
SQL> select emp.name, emp.id, org.id, org.name
  2    from emp, org
  3   where org.id in
  4         (select TRIM(REGEXP_SUBSTR(orgid, '[^,]+', 1, level)) value
  5            from emp_org
  6           where empid = emp.id
  7          connect by level <= length(regexp_replace(orgid, '[^,]*')) + 1)
  8  ;
 
NAME       ID         ID         NAME
---------- ---------- ---------- ----------
李四       2          1          部门1
李四       2          2          部门2
李四       2          3          部门3
李四       2          4          部门4
张三       1          1          部门1
张三       1          3          部门3
张三       1          4          部门4
 
7 rows selected
 
SQL> 
JavaAlpha 2015-03-18
  • 打赏
  • 举报
回复
引用 4 楼 wildwave 的回复:
中间表和用户表间,通过用户ID关联就好 中间表和机构表,只能用like来关联 ','||中间表.机构ID||',' like '%,'||机构表.机构ID||',%' 如果机构表较大,查询效率会很低 这个中间表,本来正常来说,作为用户和机构的关系表,像图中的情况,应该分成两条记录来存
谢谢,我试试看看。
小灰狼W 2015-03-18
  • 打赏
  • 举报
回复
中间表和用户表间,通过用户ID关联就好 中间表和机构表,只能用like来关联 ','||中间表.机构ID||',' like '%,'||机构表.机构ID||',%' 如果机构表较大,查询效率会很低 这个中间表,本来正常来说,作为用户和机构的关系表,像图中的情况,应该分成两条记录来存
JavaAlpha 2015-03-18
  • 打赏
  • 举报
回复
引用 2 楼 jdsnhan 的回复:
你的问题是什么
现在是结果3的service_unit字段和结果4的ID字段关联问题,之前service_unit跟ID是一对一的对应。 现在是多个值了。不知道怎么查询了。
jdsnhan 2015-03-18
  • 打赏
  • 举报
回复
你的问题是什么
JavaAlpha 2015-03-17
  • 打赏
  • 举报
回复
第一个图片是中间表, 第二个图片是机构表, 第三个图片是用户表。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧