在我的RoR应用程序中,我有一个类似于这个的数据库查找:
Client.joins(:products).where({'product.id' => [1,2,3]})
不幸的是,这将返回已购买产品1,2或3的所有客户,但我只想取回客户,购买三种产品的全部。换句话说,我想编写一个匹配给定集合中n个元素的查询。
对此有什么优雅的解决方案吗?
答案 0 :(得分:7)
这不是很优雅。但它应该转化为所需的SQL。
Client.joins(:products).
where({'products.id' => [1,2,3]}).
group('users.id').
having('COUNT(DISTINCT products.id) >= 3')
答案 1 :(得分:4)
相同的答案以更动态的方式
ids = [1,2,3]
Client.joins(:products).
where({'products.id' => ids}).
group('users.id').
having('COUNT(DISTINCT products.id) >= ?', ids.size)