1

我在 Oracle 中创建一个执行一些连接的视图时遇到了一些麻烦。主要问题:获取在结果行中表示的 n:n 关系?甲骨文 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

表:用户

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
4

2 回答 2

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
于 2013-02-08T11:28:58.550 回答
0

看看这篇文章。在 Oracle 11gR2 中这很容易,在以前的版本中它有点复杂但可以完成。

于 2013-02-08T11:31:48.523 回答