语句NOT IN(?)或不存在的ActiveRecord

时间:2014-03-31 20:22:55

标签: sql ruby-on-rails activerecord

在铁路招聘应用中,我在下面进行查询,以选出适合特定工作的所有潜在用户

  # 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查询中,该语句允许没有应用程序的用户?

2 个答案:

答案 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)