2016-03-15 86 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