我有4个表A,B,C & d如下:
B belongs to A
B belongs to C
&
C has many D
导轨查询 - 有条件加入
作为 'A' 可以或可以不具有任何B的但如果有一个B,那么B必须有一个C.根据我的逻辑,C将至少有一个D或更多。
现在,我想列出A的计数(b)以及计数(d)。这里计数(b)和计数(d)可能为零。
所以我在做什么至今如下:
@a = A.joins(bs: {c: :ds}).select("a.*, count(b) as count_b, count(d) as count_d").group("a.id")
但最终这是行不通的,因为它INNER JOIN
b
与a
。这意味着,如果a
没有相应的b
,那么a
将不在列表@a
中。那就是问题所在。
那么,有没有办法做到这一点?
你说得对。如果只有A和B,它就可以工作。但我不知道,哪一个适用于B/C,C-CD和CD-D。我希望,我在解释时并没有模棱两可。 –
你可以尝试修改后的解决方案(并告诉我如果没有工作是什么问题) – pshoukry
其实我早些时候尝试过,但没有奏效。我试过'@a = A.joins(“A.id = B.a_id上的LEFT JOIN B C.id = B.c_id上的LEFT JOIN CD C.id = CD.c_id上的LEFT JOIN CD LEFT JOIN D. ID = CD.d_id“)'而不是为我工作。 –