rails query - 条件连接

时间:2015-10-04 10:52:54

标签: mysql ruby-on-rails

我有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的列表,包括count(b)和count(d)。这里count(b)和count(d)可能为零。

所以我到现在所做的事情如下:
@a = A.joins(bs: {c: :ds}).select("a.*, count(b) as count_b, count(d) as count_d").group("a.id")
但最终这不起作用,因为它INNER JOIN ba。这意味着,如果b没有对应的a,那么a将不在列表@a中。这就是问题所在。

那么,有什么办法吗?

3 个答案:

答案 0 :(得分:0)

尝试左外连接:
@a = A.joins("LEFT JOIN B on A.id=B.a_id INNER JOIN C on C.id=B.c_id INNER JOIN CD on C.id=CD.c_id INNER JOIN D on D.id=CD.d_id") 有关详细信息,请查看此question

答案 1 :(得分:0)

joins有一个接受字符串的表单。在该字符串中,您可以放置​​'LEFT OUTER join bs ON bs... = as...'

答案 2 :(得分:0)

我试过了 @a = A.joins("LEFT JOIN B on A.id=B.a_id LEFT JOIN C on C.id=B.c_id LEFT JOIN CD on C.id=CD.c_id LEFT JOIN D on D.id=CD.d_id")对我有用。

相关问题