我有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
我希望从表C中检索数据,这取决于表A中的id在单个查询中的方式
如果表B在表C中有相关记录,我想显示来自B和C的两个记录,否则只记录表B(即这里firstName“xyz”有多个电话号码所以我将显示xyz = 44444,55555, 66666,ddd没有电话,所以只有ddd)
目前我正在做,
a)从表B中选择所有ID,其中表A中的AandB_Relation_Key = id //它返回表B中的所有id对表A中的id
b)然后我遍历所有id,从表C中对每个id进行计数,从表C中选择count(*),其中id =从a中检索ids
c)如果计数> 0从表B中选择firstName,phoneNo,C
d)否则从表B中选择firstName
感谢。
答案 0 :(得分:0)
select new list(firstName,phone_no) from A left join B left join C where a.id=:id
我认为应该这样做。你会得到一个带有可选语音的名字列表。