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 に答える