【问题标题】:Oracle Query to get all the users with roles & skillsOracle Query 获取所有具有角色和技能的用户
【发布时间】:2012-05-28 14:31:05
【问题描述】:

下面是我的表格。有 4 个表包含用户、角色、高级角色和具有技能的角色。我想获得所有具有角色和详细技能的用户。 以下是预期的输出示例。我需要一个查询来获得下面提到的输出。感谢您的帮助。

表 T1

T1_ID     Name
101       Peter
102       Kevin 
103       Ross 
104       Smith

表 T2

T2_ID          Role
201             Admin
202             Programmer
203             Tester
204             Analyst

表 T3

T3_ID        T1_ID            T2_ID
301          101               201
302          102               202
303          102               204
304          104               202
305          104               203

表 T4

T4_ID      T1_ID       T2_ID    Skill
401         102        202      Java
402         102        202      Spring
403         102        204      Microsoft
404         104        202      c++
405         104        203      website  

我想要输出(所有具有 T3 和 T4 角色和技能的用户)。

T1_ID        user_name          Role                      skill
101          Peter              Admin          
102         Kevin              Programmer                 Java
102         Kevin              Programmer                 Spring
102         Kevin              Analyst                    Microsoft
104         Smith              Programmer                 C++
104         Smith              Tester                     Website

【问题讨论】:

  • 如果您能够证明您拥有tried something yourself 并且不只是要求其他用户为您编写代码,那么您更有可能获得更好的答案。

标签: sql oracle10g


【解决方案1】:

您可能需要进行一系列连接才能将所有表格链接在一起。在我的脑海中,类似以下的方法可能会起作用:

select t1.*, T2.Role, T4.Skill from T1
left join T3 on T3.T1_ID = T1.T1_ID
left join T2 on T2.T2_ID = T3.T2_ID
left join T4 on T4.T1_ID = T1.T1_ID and T4.T2_ID = T2.T2_ID 
order by 1

查看此页面以获取不同类型连接的简单示例https://forums.oracle.com/forums/thread.jspa?threadID=595030

--编辑--

更新的查询工作,它会产生上面的表格,但也包括罗斯,没有任何角色或技能。

T1_ID        user_name          Role                      skill
103          Ross

如果您不希望出现没有角色的人,请在“order by 1”行之前添加以下行。

where T2.Role is not null

【讨论】:

  • where T2.Role != '' 无效。由于遗留原因,Oracle 将空字符串视为 null。由于您不能在 null 上使用相等运算符,因此应该在 T2.Role is not null 的位置(尽管我认为您根本不需要它)。
  • 欢迎您@Shri ...如果解决方案有效,请不要忘记单击答案左侧的勾号将其标记为已接受;-)
猜你喜欢
  • 2021-10-06
  • 2023-03-21
  • 2014-04-24
  • 2015-01-09
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多