使用Oracle在一行中选择n:n关系(以创建视图)

时间:2013-02-08 10:49:53

标签: sql oracle10g

我在Oracle中创建一个View有些麻烦 连接。主要问题:获取结果行中表示的n:n关系? Oracle 10.x

表: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

我需要一个View(select),如:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

看看这个article。在Oracle 11gR2中它很简单,在以前的版本中它有点复杂但可以完成。