-1

我有三个实体:

问题

  • ID
  • 问题
  • ...
  • 选择列表(x-1 与选择列表)

选择列表

  • ID
  • 姓名
  • 选择(1-x 与选择值)

选择价值

  • ID
  • 价值

每个“问题”可能有也可能没有附加的“选择列表”。每个选项列表可能附有许多“ChoiceValues”。问题的数据库很大,我们在每个选择列表中有很多选择,网站速度明显变慢。

为了优化我的数据库查询,对所有问题进行一次查询并在结果中包含所有需要的选择列表及其选择是有意义的,因此不需要进行更多查询。

SELECT q, cl, cc FROM Question q JOIN q.choicelist cl JOIN cl.choices cc

如果我这样做,我的印象是只有带有选择列表的问题才会被加入(因此,如果关联不为空),因此如果问题没有选择列表,则此查询将不会返回它。

我想知道如何调整这个 DQL,以便返回所有问题,如果问题有关联的选择列表,那么它们也应该被返回。

4

1 回答 1

1

你需要做左联接:

SELECT q, cl, cc FROM Question q LEFT JOIN q.choicelist cl JOIN cl.choices cc
于 2013-09-02T13:52:53.407 回答