我在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
答案 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中它很简单,在以前的版本中它有点复杂但可以完成。