2013-02-08 39 views
1

我在Oracle中創建視圖時遇到了一些麻煩,至少有一些 聯接。主要問題:獲得結果行中表示的n:n關係? 甲骨文10.x的在Oracle中選擇n:n關係(創建視圖)

表:HAS_APPLICATIONS

USER_ID APPLICATION_ID 
------- -------------- 
1  1 
1  2 
4  2 
4  1 
2  1 
2  3 

表:應用

ID    APPLICATION 
---------  ----------- 
1    Windows 
2    OSx 
3    FreeDos 

表:USERS

USER_ID  NAME 
-------  --------- 
1    Bob 
4    Johny 
2    Elvis 

我需要像一個視圖(選擇):

USER_ID NAME APPLICATIONS 
1  Bob Windows, OSx 
2  Elvis Windows, FreeDos 
4  Johny OSx, Freedos 

我的 「不工作」 查詢:

SELECT 
    u.NAME, 
    (SELECT 
     APPLICATION_ID 
    FROM 
     HAS_APPLICATIONS   
    LEFT JOIN APPLICATIONS ON HAS_APPLICATIONS.USER_ID = APPLICATIONS.ID 
    WHERE 
     HAS_APPLICATIONS.USER_ID = u.ID) ??????????? 
FROM 
    USERS u 

回答

1

請嘗試以下查詢。不知道它是否適用於10G,但它在11G中運行良好。

SELECT 
    u.NAME,  
    (SELECT 
    (RTRIM(XMLAGG(xmlelement(X, APPLICATIONS.APPLICATION||',')order by APPLICATIONS.APPLICATION).extract('//text()'),',')) 
    FROM 
     HAS_APPLICATIONS   
    LEFT JOIN APPLICATIONS ON HAS_APPLICATIONS.USER_ID = APPLICATIONS.ID 
    WHERE 
     HAS_APPLICATIONS.USER_ID = u.ID)   
FROM 
    USERS u 
+0

太棒了!多謝 – opHASnoNAME

0

看看這個article。在Oracle 11gR2中很容易,在以前的版本中它有點複雜,但可以完成。