我有三个实体:
每个“问题”可能有也可能没有附加的“ChoiceList”。每个选择列表可能附加了许多“ChoiceValues”。问题数据库是巨大的,我们在每个选择列表中有很多选择,网站显着放缓。
为了优化我的数据库查询,对所有问题进行单一查询并在结果中包含所有需要的选择列表及其选择是有意义的,因此不需要进行更多查询。
SELECT q,cl,cc 来自问题q 加入q.choicelist cl JOIN cl.choices cc
如果我这样做,我的印象是只有选择列表的问题才会被加入(因此,如果关联不为空),如果问题没有选项列表,则此查询不会返回它。
我想知道如何调整此DQL,以便返回所有问题,如果问题与选择列表相关,那么它们也应该返回。
答案 0 :(得分:1)
你需要做LEFT JOIN:
SELECT q, cl, cc FROM Question q LEFT JOIN q.choicelist cl JOIN cl.choices cc