查找患有特定疾病的用户的疾病

时间:2013-11-04 07:39:40

标签: ruby-on-rails ruby postgresql subquery

编辑:

我试图让患有疾病A的用户患上所有其他疾病。

旧问题(错误):

我试图让患有某些疾病的用户也患上其他疾病:

class User
  has_many :treatments
end

class Disease
  has_many :treatments
end

class Treatment
  belongs_to :user
  belongs_to :disease
end

我有一些工作代码:

获取因特定疾病而受苦的所有用户ID:

user_ids = Treatment.joins(:user).where(disease_id: 250).pluck(:user_id)

根据用户ID获取所有疾病

Disease.where("id != 250").where(id: Treatment.select("DISTINCT disease_id").where(user_id: user_ids))

有更简单的方法吗?也许一个查询?

1 个答案:

答案 0 :(得分:0)

EDITED: 如果要使用一个查询,可以使用以下一个:

select distinct d1.id from diseases as d1 
  JOIN treatments as t1 on d1.id=t1.disease_id 
  where exists (
    select t2.id from treatments as t2 
      where t2.disease_id = 250 AND t2.user_id=t1.user_id
  ) AND d1.id <> 250;