2013-08-08 2 views
1

부모 테이블 A이 있습니다. A는 자식 테이블이 서로 연결되지 않은 같은 B, C, D, E, F, G 로 몇 자식 테이블이 있습니다. 그들은 A에만 연결됩니다. A에는 모든 하위 테이블에서 외래 키로 사용되는 Id 키가 있습니다.부모 테이블과 하위 테이블을 결합하는 가장 좋은 방법

이 테이블을 단일 뷰로 만들 수 있도록 이러한 테이블을 조인하는 가장 좋은 방법은 무엇입니까?

+0

출력에 따라 다릅니다. 동일한 A 값에 대해 다른 테이블의 다른 열을 원하거나 일반 열과 별도의 행을 원하십니까? –

+0

@ Nenad..bascally 단일보기를 사용하여 테이블에서 모든 데이터를 얻을 수 있도록 모든 테이블에 대한 모든 레코드가 있어야하는 논리적보기가 필요합니다. – user1706047

+0

이 작업을 수행하는 것이 일반적이지 않습니다. 8 개의 하위 테이블 각각에 대해 주어진 부모에 대해 4 개의 레코드가있는 경우 모두 한 번에 쿼리하면 65,536 개의 행이 클라이언트에 반환됩니다. 일반적으로 각 자식 레코드를 다른 모든 자식 테이블의 모든 레코드에 조인하는 것은 의미가 없습니다. –

답변

2
select <wanted columns> 
from a 
left join b 
on a.id = b.a_id 
left join c 
on a.id = c.a_id 
left join d 
on a.id = d.a_id 
+0

답장을 보내 주신 많은 분께 감사드립니다. – user1706047

5

상위 테이블에는 일부 테이블에 하위 행이있을 수 있으므로 LEFT OUTER JOIN을 사용해야합니다.

LEFT OUTER JOIN은 LEFT 테이블의 모든 행 (이 경우 A)과 다른 테이블의 모든 일치를 반환하는 두 개의 테이블을 조인합니다. 일치하는 항목이 없으면 일치하는 항목이없는 해당 테이블 열에 NULL을 반환합니다.

SELECT * 
FROM A 
LEFT OUTER JOIN B 
    ON A.Id = B.ParentID 
LEFT OUTER JOIN C 
    ON A.Id = C.ParentID 
    LEFT OUTER JOIN P 
     ON C.Id = P.ParentID 
    LEFT OUTER JOIN Q 
     ON C.Id = Q.ParentID 
LEFT OUTER JOIN D 
    ON A.Id = D.ParentID 
LEFT OUTER JOIN E 
    ON A.Id = E.ParentID 
LEFT OUTER JOIN F 
    ON A.Id = F.ParentID 
    LEFT OUTER JOIN X 
     ON F.Id = X.ParentID 
    LEFT OUTER JOIN Y 
     ON F.Id = Y.ParentID 
LEFT OUTER JOIN G 
    ON A.Id = G.ParentID 

편집

나는 subchilds를 추가 할 수있는 방법을 추가했습니다. 나는 그것들을 시각적 인 표현으로 명백하게하기 위해 더 많은 것을 의도했다. 그러나 조심하십시오 ...이 subchildren에 다른 어쩌면 당신의 구조가 다른 subchildren가있는 경우에지도는 최선 아닙니다.

+0

답장을 보내 주신 많은 분께 감사드립니다. – user1706047

+0

일부 하위 항목에 하위 하위 항목이 있다고 가정하십시오. 예를 들어 'C'는 하위 항목 'P'와 'Q'를 가지고 있습니다.'F'에는 하위 항목' X'와'Y'..then 그러면 같은 쿼리에서 하위 클래스에 대해 JOIN을 사용하면 작동합니까? – user1706047

+0

이에 따라 왼쪽으로 결합해야합니다. 그러나 그것은 무한 사슬로 이어질 수 있습니다. 예를 들어 자신의 하위 클래스가있는 하위 클래스가있는 경우 ... –

관련 문제