2009-11-10 2 views
1

감안할 때 세 개의 테이블 결과 다음과 같은 방법으로 :오라클 PL/SQL Denomalised는

car_id, make, model, extra[] 

예 :

1, Ford, Fiesta, sunroof;electric windows 
2, BMW, M3, sports pack;alarm;sat nav 
3, subary, impreza, leather seats;ABS 

저는 데이터베이스와 관련하여 매우 초보자입니다. 우리의 실제 시스템에서 우리가 각 차량에 '자동차'의 1000을 반환됩니다은까지 가지고 있습니다 약 10 '엑스트라'

답변

4

이 그냥보기, 절차 필요없이해야한다 :

create view myview as 
select c.car_id, c.make, c.model, WM_CONCAT(e.extra) as extras 
from table_car c, table_car_extras_link l, table_extras e 
where c.car_id=l.car_id and l.extra_id=e.extra_id 
group by c.car_id; 

WM_CONCAT은 문자열의 SUM과 같습니다.

연결 기술에 대해서는 this page을 참조하십시오.

+4

+1 : 좋은 링크는 사용 가능한 모든 기술을 요약한다. WM_CONCAT이 지원되지 않고 문서화되지 않았다는 것을 추가하고 싶을 수도 있습니다. 11gR2에서는 LISTAGG를 사용합니다 (http://download.oracle.com/docs/cd/E11882_01/server.112/e10592/functions087.htm#SQLRF30030). –

2

다음은 9i의에서 작동 이상, 그것은 Tom Kyte's concatenation function 사용

SELECT c.car_id, c.make, c.model, stragg(e.extra) 
    FROM table_car c 
    LEFT JOIN table_car_extras_link ce ON c.car_id = ce.car_id 
    LEFT JOIN table_extras e ON ce.extra_id = e.extra_id 
GROUP BY c.car_id, c.make, c.model