0

我有 3 张桌子。A,B,C。A 与 B 一对多。 B 与 C 一对多。

表中的数据是,

TABLE A
id                 
10
15

TABLE B
id      firstName    AandB_Relation_Key
55       Abc           10
66       Pqr           10
77       xyz           10
88       ddd           15

TABLE C
id       phone_no      CandB_Relation_key
41        44444         77
42        55555         77
43        66666         77
44        88888         66

我想在单个查询中根据表 A 中的 id 从表 C 中检索数据,这样

如果表 B 在表 C 中有相关记录,我想显示来自 B 和 C 的记录,否则只显示来自表 B 的记录(即这里 firstName "xyz" 有多个电话号码,所以我将显示 xyz = 44444,55555,66666, ddd没有电话所以只有ddd)

目前我正在做,

a) 从表 B 中选择所有 id,其中 AandB_Relation_Key=id from Table A // 它返回表 B 中的所有 id 与表 A 中的 id

b)然后迭代所有id,从表C中对每个id进行计数,从表C中选择count(*),其中id=从a中检索到的id

c) 如果 count > 0 从表 B,C 中选择 firstName,phoneNo

d) 否则从表 B 中选择名字

谢谢。

4

1 回答 1

0
select new list(firstName,phone_no) from A left join B left join C where a.id=:id

我认为应该这样做。您将获得带有可选电话号码的名字列表。

于 2012-07-21T08:24:12.547 回答