2016-03-15 43 views
0

我有一个表,其中显示一个人到学校的偏好,这样上市的喜好与Oracle数据库

Person(name, preference_id) 
      /
School(school_id, name) 

每个人都可以拥有多所学校(由preference_id所示)的兴趣,就像这样:

Person(John, 132) 
Person(John, 133) 
School(132, UVA) 
School(133, UMBC) 

^John would like to go to either UVA or UMBC. 

我想编写一个查询,显示每个人的所有school.name s。

select person.name, school.name 
from Person, School 
where person.preference_id = school.school_id 
; 

但是,我上面会以1人-1的学校名称比例返回。无论如何,我可以修改这个,所以它是1人 - 多学校的名字?谢谢

+1

使用'list_agg'函数,研究这个链接:http://www.techonthenet.com/oracle/functions/listagg.php – krokodilko

回答

1
SELECT p.name, 
     LISTAGG(s.name, ',') WITHIN GROUP (ORDER BY s.name) AS preferences 
FROM Person p 
     INNER JOIN School s 
     ON (p.preference_id = s.school_id) 
GROUP BY p.name