2014-12-11 5 views
0

У меня есть DataModel. MyDataObject.Уменьшить количество запросов к выполнению

Каждый объект MyDataObject содержит 2 типа данных, а именно: A & List<BC>.

То есть:

class MyDataObject { 

    String A; 
    List<BC> bc; 
} 

class BC { 
    String B; 
    String C; 
} 

Теперь я выборки данных из базы данных. Stucture БД, как:

А может иметь множество B, а

существует взаимно однозначное отображение-к-одному между B & C (с может быть нулевым, поэтому один запрос соединения является nogood здесь).

В первом запросе я получаю A & Список с использованием соединения. ResultSet, как:

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

Во втором запросе я принести каждый C для B, т.е.

B1 C1 
B2 C2 
B3 C3.... 

Проблема в первом результирующем запросе, я в состоянии установить A & List, например

for (Result result: resultSet) { 
    if (myData.getA == null) { 
     myData.seta(result.getA()); 
    } 
    myData.setB(result.getB); 
} 

Но для второго запроса мне нужно передать идентификатор B в качестве аргумента в where where, чтобы извлечь Cs.

Таким образом, для каждого А, Я выполнить запрос & передать его B для выборки C.

Как я могу сделать это в запросе, а затем установить 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 может быть нулевым, поэтому, если я присоединяюсь к B & C, а C - null, то для этого случая B также не возвращается. Извините, я пропустил этот вопрос, вопрос обновился. – reiley

+0

Обновлен мой ответ. Теоретически он должен работать так, как вы хотите, но я признаю, что не пробовал. – DaaaahWhoosh

+0

технически он должен работать, но мой сценарий не так прост, как объяснялось в вопросе, и левое соединение также не работает. Что делать RCA. Спасибо – reiley

Смежные вопросы