首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不返回数组的情况下组合两个select语句的结果的最佳方法?

在不返回数组的情况下组合两个select语句的结果的最佳方法?
EN

Stack Overflow用户
提问于 2019-06-12 02:21:26
回答 2查看 32关注 0票数 0

我试图从查询两个不同的表中获得一组唯一的用户。例如,假设我想要找到一组独特的宠物主人。有些主人养狗,有些主人养猫--我想知道养狗或养猫或两者都养的主人的人数。

我知道一个解决方案是

代码语言:javascript
复制
dog_owners = Dog.joins(:owner).select(:owner_id).distinct
cat_owners = Cat.joins(:owner).select(:owner_id).distinct
combined_owners = dog_owners + cat_owners
unique_owners = combined_owners.uniq{|x| x.owner_id}
unique_owners.count 

有没有一种方法可以让我不用使用uniq调用,而使用distinct呢?因为数组操作符返回一个数组,所以我不能在这里使用distinct

EN

回答 2

Stack Overflow用户

发布于 2019-06-12 02:43:20

你能走另一条路吗?

代码语言:javascript
复制
Owner
   .left_outer_joins(:dogs, :cats)
   .where("dogs.owner_id IS NOT NULL OR cats.owner_id IS NOT NULL")
   .distinct
票数 2
EN

Stack Overflow用户

发布于 2019-06-12 02:48:35

我认为gabrielhilal的答案更好。我只是把它放在这里,供那些可能有与OP相同的需求,但在条件中具有所需灵活性的人使用。

代码语言:javascript
复制
owners = Owner.where(
  id: Dog.joins(:owner).select(:owner_id)
).or(
  Owner.where(
    id: Cat.joins(:owner).select(:owner_id)
  )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56549657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档