sql – ActiveRecord左外连接和子句
发布时间:2020-12-12 06:42:40 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用Rails 3和ActiveRecord,我不能让它生成我想要的查询而不插入几乎普通的SQL. 我只是想执行这个SQL查询(实际上查询有点复杂,但实际上这部分我无法正确). SELECT DISTINCT users.*,possible_dates.*FROM users LEFT OUTER JOIN possible_dates ON poss
我正在使用Rails 3和ActiveRecord,我不能让它生成我想要的查询而不插入几乎普通的SQL.
我只是想执行这个SQL查询(实际上查询有点复杂,但实际上这部分我无法正确). SELECT DISTINCT users.*,possible_dates.* FROM users LEFT OUTER JOIN possible_dates ON possible_dates.user_id = users.id AND possible_dates.event_id = MY_EVENT_ID; 我设法使用 User.includes(:possible_dates) .joins("LEFT OUTER JOIN possible_dates ON possible_dates.user_id = users.id AND possible_dates.event_id = #{ActiveRecord::Base.sanitize(self.id)}" ) .uniq 但我觉得我遗漏了一些东西,只需使用ActiveRecord查询方法添加左连接的AND条件. User.includes(:possible_dates) .where('possible_dates.event_id' => self.id) .uniq 但是这会产生(如预期的那样)一个在末尾带有WHERE子句的查询,而不是我想要的AND子句. 顺便说一下,上面两个片段中的self是我的Event类的一个实例. 谢谢您的帮助. 解决方法(1年后……)环顾四周后,我发现最好的可能是使用arel表. 对于上面的示例,以下代码将起作用. ut = User.arel_table pt = PossibleDate.arel_table et = Event.arel_table User.joins( ut.join(pt,Arel::Nodes::OuterJoin) .on(pt[:user_id].eq(u[:id]) .and(pt[:event_id].eq(1)) ).join_sql ).includes(:possible_dates).uniq 方程(1)中的1应该用正确的事件id替换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |