Ruby on rails 其中所有元素都匹配,而不是任何元素,但所有元素都完全匹配

Ruby on rails 其中所有元素都匹配,而不是任何元素,但所有元素都完全匹配,ruby-on-rails,postgresql,rails-activerecord,relational-division,Ruby On Rails,Postgresql,Rails Activerecord,Relational Division,但是,在本例中,此查询返回具有任何产品ID 3或4的配方。但我只需要所有这些产品的配方 我发现了类似的问题,但没有帮助 Recipe.joins(:ingredients) .where('recipe_ingredients.require_in_filter = ? AND recipe_ingredients.product_id IN (?)', true, [3,4]) .distinct 始终返回空数组 这是原始sql Recipe.joins(:ingredients) .sel

但是,在本例中,此查询返回具有任何产品ID 3或4的配方。但我只需要所有这些产品的配方

我发现了类似的问题,但没有帮助

Recipe.joins(:ingredients)
.where('recipe_ingredients.require_in_filter = ? AND recipe_ingredients.product_id IN (?)', true, [3,4])
.distinct
始终返回空数组

这是原始sql

Recipe.joins(:ingredients)
.select('COUNT(*) AS count, recipes.*')
.where('recipe_ingredients.require_in_filter = ? AND recipe_ingredients.product_id IN (?)', true, [3,4])
.group('recipes.id').having('count(*) = ?', 2)
返回配方,其中2和3是唯一必需的产品,但不应返回,因为17也是必需的


我的SQL知识不足以完成此任务

您的第二次查询不起作用,因为您是按recipes.id分组的,如果我理解正确的话,您希望查询不同产品id的计数,请尝试按该值分组:

select recipes.*
from recipes 
join recipe_ingredients
on recipe_ingredients.recipe_id = recipes.id
where not exists(
    select * from recipe_ingredients ri 
    where ri.recipe_id = recipes.id
    and ri.product_id not in(2,3,17)        
)
and recipe_ingredients.require_in_filter = true
group by recipes.id
这会产生一个错误:PG::GroupingError:error:column recipes.id必须出现在GROUP BY子句中或在聚合函数中使用
select recipes.*
from recipes 
join recipe_ingredients
on recipe_ingredients.recipe_id = recipes.id
where not exists(
    select * from recipe_ingredients ri 
    where ri.recipe_id = recipes.id
    and ri.product_id not in(2,3,17)        
)
and recipe_ingredients.require_in_filter = true
group by recipes.id
Recipe.joins(:ingredients)
.where('recipe_ingredients.require_in_filter = ? AND recipe_ingredients.product_id IN (?)', true, [3,4])
.group('recipe_ingredients.product_id').having('COUNT(*) = ?', 2)