在铁路招聘应用中,我在下面进行查询,以选出适合特定工作的所有潜在用户
# Job Model
def potentials
User.includes(:source, :heat, :applications, common_app: [:cities, :industries])
.where('cities.id IN (?)', self.city_ids)
.where('industries.id IN (?)', self.industry_ids)
.where('applications.id NOT IN (?)', self.applications.map(&:id))
.order('common_apps.progress DESC')
end
问题在于
.where('applications.id NOT IN (?)', self.applications.map(&:id))
我这样做是为了确保我没有让已经申请工作的用户
但是,如果我这样写,查询会排除所有不适用于任何作业的用户,因此没有应用程序.id
我该怎么做,以便在where查询中,该语句允许没有应用程序的用户?
答案 0 :(得分:0)
啊,想出了一个修正案,但没有回答原来的问题。
我没有在where子句中使用applications.id,而是使用了users.id,肯定存在于所有用户中。
def potentials
User.includes(:source, :heat, :applications, common_app: [:cities, :industries])
.where('cities.id IN (?)', self.city_ids)
.where('industries.id IN (?)', self.industry_ids)
.where('users.id NOT IN (?)', self.users.map(&:id))
.order('common_apps.progress DESC')
end
答案 1 :(得分:0)
我想你想要:
.where("not exists(select *
from applications ap
where ap.user_id=users.id
and ap.job_id=?)", self.id)