gpt4 book ai didi

sql - ActiveRecord 左外连接和子句

转载 作者:行者123 更新时间:2023-12-04 08:35:29 25 4
gpt4 key购买 nike

我正在将 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

但我觉得我缺少一些东西来简单地添加 AND使用 ActiveRecord 查询方法的左连接条件。
我也尝试做这样的事情
User.includes(:possible_dates)
.where('possible_dates.event_id' => self.id)
.uniq

但这会产生(如预期的那样),一个带有 WHERE 的查询最后的条款而不是 AND我想要加入的条款。

顺便说一句, self在上面的两个片段中是我的 Event 的一个实例类(class)。

感谢您的帮助。

最佳答案

(一年后……)
环顾四周后,我发现最好的方法可能是使用 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
1eq(1)应替换为正确的事件 ID。

关于sql - ActiveRecord 左外连接和子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18802060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com