【发布时间】:2014-02-16 01:57:15
【问题描述】:
我正在努力解决 Active Record 加入问题。
我有这个数据库表结构:
A - B - C - D - E
和
A - F - E
如果有以下任一路径,我想从 A 获取所有记录:
A - B - C - D - E
A - F - E
满意。
我用 Active Record 试过这个:
A.joins(:B => {:C => {:D => :E}}, :F => :E)
.where("some constraints on E and …")
但这不起作用,因为所有都是像这样作为内部连接生成的:
SELECT A.*
FROM A
INNER JOIN B ON A.b_id = B.id
INNER JOIN C ON B.c_id = C.id
INNER JOIN D ON C.d_id = D.id
INNER JOIN E ON D.e_id = E.id
INNER JOIN F ON A.f_id = F.id
INNER JOIN E E_F ON E_F.f_id = F.id
WHERE ("some constraints on E")
我希望我没有在这里输入错误,但核心是,在生成的 SQL 语句中,两个路径都在 ON 子句中。
问题是必须满足两条路径才能从表 A 返回记录,对吧?
我需要一个从 A 为两条路径返回记录的语句。
最后,uniq() 使它们变得独一无二。
我也尝试过merge() 两个单独的选择/加入(路径A - B - C - D - E" and "A - F - E") butmerge()does an intersection.
The only solution that I have come up with, is to+` 两个单独的结果集,但问题是我得到了一个数组,因此我不能使用(kaminari)分页。
其次,当结果集变大时,这不是一个好的解决方案。
我会很感激任何提示。 谢谢!
【问题讨论】:
标签: ruby-on-rails ruby activerecord join