我有三个实体:
问题
- id
- 问题
- choicelist(带choicelist的x-1)
选项列表
- id
- 名称
- 选项(带选项值的1-x)
ChoiceValue
- id
- 价值
每个"问题"可能有也可能没有附带的"选项表"。每个选项列表可能都附有许多"选项值"。问题数据库庞大,每个选项列表中都有很多选项,网站速度明显放缓。
为了优化我的数据库查询,对所有问题进行一次查询是有意义的,并且在结果中包括了所有需要的选项列表和他们的选择,所以不需要进行更多的查询。
选择q、cl、ccFROM问题q加入q.choicelist-cl加入cl.choices cc
如果我这样做,我的印象是只有有选择列表的问题才会被加入(所以,如果关联不是空的),这样,如果问题没有选择列表,这个查询就不会返回它。
我想知道如何调整这个DQL,以便返回所有问题,如果问题有相关的选择者,那么也应该返回。
您需要执行LEFT JOIN:
SELECT q, cl, cc FROM Question q LEFT JOIN q.choicelist cl JOIN cl.choices cc