我有 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?
答案 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,虽然我现在不太确定。 再次更新,这应该使左连接工作。