2014-12-11 2 views
0

나는 데이터 모델을 사용했습니다. MyDataObject.쿼리 실행 횟수 줄이기

각 MyDataObject에는 두 가지 데이터 유형 즉, A & List<BC>. 이다

:

class MyDataObject { 

    String A; 
    List<BC> bc; 
} 

class BC { 
    String B; 
    String C; 
} 

지금, 나는 데이터베이스에서 데이터를 가져 오는거야.

A가 여러 B를 가질 수 있으며

(null의 가능성이 있으므로 단일 쿼리가 여기 nogood 조인 될 수 있습니다 C) B & C 사이의 일대일 매핑이 : DB의 Stucture 같은 것입니다.

첫 번째 쿼리에서 A를 사용하여 &리스트를 가져옵니다. 결과 집합은 같은 것입니다 : 나는 B에 대한 각 C를 가져했습니다 두 번째 쿼리에서

A1 B1 
A1 B2 
A1 B3 
A2 B4 
A2 B5.... 

, 즉

B1 C1 
B2 C2 
B3 C3.... 

문제는 쿼리 결과 집합에, 나는 & 목록을 설정할 수있어, like

하지만 두 번째 쿼리에서는 where 절에서 B의 id를 인수로 전달해야 Cs를 가져올 수 있습니다.

그래서, 각 A의, 나는 쿼리에서이 작업을 수행 할 수있는 방법 &는 C.

를 가져올의 B를 통과 쿼리를 실행했습니다 및 이후 단계의 최소한의 데이터 형 BC에서 C를 설정 ?

답변

1
SELECT ab.A, ab.B, c.C 
FROM 
(SELECT a.A, b.B, b.id FROM A a JOIN B b ON a.id = b.id) ab 
LEFT JOIN C c ON ab.id = c.id 

정확하게 이해하면 필요한 모든 것을 하나의 쿼리로 제공해야합니다. nullable C를 처리하기 위해 업데이트되었지만 지금은 그다지 확실하지 않습니다. 다시 업데이트하면 왼쪽 결합이 작동해야합니다.

+0

예, 그게 제가 이전에 한 일입니다. 하지만 C는 nullable이 될 수 있습니다. 따라서 B & C에 가입하면 C가 null이고 그 경우 B도 반환되지 않습니다. 미안 해요,이 질문을 놓쳤습니다. 질문이 업데이트되었습니다. – reiley

+0

내 대답이 업데이트되었습니다. 이론적으로 당신이 원하는대로 작동해야하지만, 나는 그것을 시도하지 않은 것을 인정합니다. – DaaaahWhoosh

+0

기술적으로는 제대로 작동해야하지만 제 시나리오는 질문에 설명 된대로 간단하지 않고 왼쪽 가입도 작동하지 않습니다. RCA를하는 이유. 감사합니다 – reiley