减少查询执行次数

时间:2014-12-11 16:59:00

标签: java sql

我有 DataModel 即。的 MyDataObject

每个MyDataObject包含2种数据类型,即。 A & List<BC>

那是:

class MyDataObject {

    String A;
    List<BC> bc;
}

class BC {
    String B;
    String C;
}

现在,我正在从数据库中获取数据。 DB的结构如下:

A可以有多个B和

B&amp; B之间存在一对一的映射关系。 C(c可以为null,因此单个查询连接在这里是不好的。)

在第一个查询中,我正在获取A&amp;使用连接列表。结果集如:

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

在第二个查询中,我要为B取每个C,即

B1 C1
B2 C2
B3 C3....

问题出在第一个查询结果集中,我能够设置A&amp;列表,如

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

但是对于第二个查询,我需要将B的id作为参数传递给where子句来获取Cs。

因此,对于每个A,我都要执行一个查询&amp;通过它的B来获取C。

如何在查询中执行此操作,稍后在数据类型BC中以最小步数设置C?

1 个答案:

答案 0 :(得分: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

如果我理解正确,这应该会在一次查询中为您提供所需的一切。 更新以处理可空的C,虽然我现在不太确定。 再次更新,这应该使左连接工作。