gpt4 book ai didi

sql - ActiveRecord 查询以避免需要对结果进行额外处理

转载 作者:太空宇宙 更新时间:2023-11-03 16:22:43 25 4
gpt4 key购买 nike

我有两个模型:就业和电子邮件。 Employment has_many :emails 和 Email belongs_to :employment。

我需要找到没有工作电子邮件地址的工作。

这意味着我需要找到 deactivated_on 不为 nil 且没有关联电子邮件的 deactivated_on 为 nil 的工作。 (deactivated_on 是一个日期)

我可以找到所有有电子邮件且 deactivated_on 为 nil 的职位,然后在 ruby​​ 中遍历每个职位的电子邮件以仅返回没有电子邮件且 deactivated_on 为 nil 的职位。但我希望一定有一种方法可以编写实现此结果的查询。

如有必要,我愿意使用 ActiveRecord 或原始 sql。

我目前有:

class Employment < ActiveRecord::Base
has_many :emails

def no_working_emails
joins(:emails).where.not(emails: { deactivated_on: nil }).uniq
end
end

这会导致就业对象与 deactivated_on 为 nil 的电子邮件以及 deactivated_on 不为 nil 的电子邮件相关联。

我需要删除也有 deactivated_on 不为零的电子邮件的工作。

我一直在研究grouphaving或使用 from 的子查询。但到目前为止,我无法摆脱那些拥有有效电子邮件地址的工作。

最佳答案

类似于以下的查询应该可以帮助您获取所有没有事件电子邮件的工作的 ID。

ActiveRecord::Base.connection.select_all <<-SQL
select e.id
from employments e
where not exists (
select 1
from emails em
where em.employment_id=e.id
and em.deactivated_on = null
);
SQL

关于sql - ActiveRecord 查询以避免需要对结果进行额外处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31192211/

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