2012-05-27 67 views
0

以下是我的表格。有4個表格包含用戶,角色,高級角色&具有技能的角色。我想讓所有擁有角色&細節技能的用戶。 以下是預期的輸出示例。我需要一個查詢來獲得下面提到的輸出。謝謝你的幫助。Oracle查詢以獲得所有具有角色和技能的用戶

表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 
+3

你更容易,如果你能證明你有得到更好的答案[嘗試自己的東西(http://mattgemmell.com/2008/12/08/what-have-you -tried /)並不只是要求其他用戶爲你做你的編碼。 – Ben

回答

1

您可能將不得不做了一系列的連接到所有的表連接起來together.off我的頭頂,像下面這樣可能工作:

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

- 編輯 -

更新的查詢工作,它會產生上表中也包括羅斯,W沒有任何角色或技能。

T1_ID  user_name   Role      skill 
103   Ross 

如果您不希望出現沒有角色的人,請在'按1排序'行之前添加以下行。

where T2.Role is not null 
+0

'其中T2.Role!='''無效。由於傳統原因,Oracle將空字符串視爲null。因爲你不能在null上使用相等運算符,所以這應該是'T2.Role不爲空'的地方(儘管我不相信你需要這個)。 – Ben

+0

感謝@Ben,上面更新以符合您的建議 – AlexS

+0

感謝AlexS&@Ben。這個解決方案適用於我。 – Shri

相關問題