我想要使用activerecord
创建以下SQL。我的问题是我陷入了逻辑循环,我无法LEFT OUTER JOIN
一个尚未加入的表格,而且我找不到加入惨败的入口点
在activerecord中我正在尝试
AdMsgs.joins("LEFT OUTER JOIN shows ON ad_msgs.user_id = shows.id OR ad_msgs.user_id = shows.b_id ")
.joins("LEFT OUTER JOIN m ON m.user_id = users.id OR m.m_id = shops.id OR m.m_id = shows.b_id")
.joins("LEFT OUTER JOIN users ON ad_msgs.to = users.email OR ad_msgs.user_id = users.id OR users.id = m.user_id")
.where("shows.id = ?", self.id)
.distinct("ad_msgs.id")
查询输出一个错误,说它不知道第二个连接上的用户是什么(可能因为我还没有加入)但我需要根据用户选择m
个记录
AdMsgs
与这两个表都没有关联。
有没有办法全外连接这3个表然后选择相关的表(或任何更好的方法?)
答案 0 :(得分:0)
使用find_by_sql
来实现此类方案。
否则作为经验法则,如果您无法使用joins
这样的Blog.joins(articles: :comments)
,那么您可能会做错事或使用find_by_sql
代替。
在复杂的情况下,我首先在SQL中编写查询以验证所涉及的逻辑。通常用一个简单的查询替换一个复杂的查询(使用IN(*ids)
)是微不足道的。