如何找到同时拥有跳蚤和蜱虫的用户:通过宠物?

时间:2011-07-15 01:26:42

标签: sql ruby-on-rails ruby-on-rails-3 activerecord

好的,我最近有great answers to a question about how to do some sub-selects in an activerecord query。我现在有一个更复杂的情况,我无法弄清楚。

我想在3个表中进行搜索,这些表与a:,例如

具有多对一关系
class User << ActiveRecord::Base
  has_many :pets
  has_many :parasites, :through => :pets
end

class Pet << ActiveRecord::Base
  has_many :parasites
  belongs_to :users
end

class Parasite << ActiveRecord::Base
  belongs_to :pets
end

现在让我说我有一些像这样的数据

users

id        name
1         Bob
2         Joe
3         Brian

pets

id        user_id  animal
1         1        cat
2         1        dog
3         2        cat
4         3        dog

parasites

id        pet_id    bug
1         1         tick
2         2         flea
3         3         tick
4         3         flea
5         4         tick

我想要做的是创建一个有效的记录查询,该查询将返回一个宠物同时具有蜱虫和跳蚤的用户(即用户2 - 乔)

这远远超出了我的主动记录和sql技能,到目前为止我甚至都懒得向你展示我的拙劣尝试。

1 个答案:

答案 0 :(得分:1)

这与上一个问题几乎相同,你只需要在子选择上深入挖掘一个级别:

User.where('id IN (SELECT user_id FROM pets WHERE
  id IN (SELECT pet_id FROM parasites WHERE bug = ?) AND
  id IN (SELECT pet_id FROM parasites WHERE bug = ?))', 'flea', 'tick')