想知道是否有人可以帮助我解决数组聚合器问题
我有一个使用连接表进行连接的查询,然后它过滤掉给定数组中的所有值,并过滤掉另一个数组中的值。
代码如下所示:
Product
|> join(:inner, [j], jt in "job_tech", on: j.id == jt.product_id)
|> join(:inner, [j, jt], t in Tech, on: jt.ingredient_id == t.id)
|> group_by([j], j.id)
|> having_good_ingredients(good_ingredients)
|> not_having_bad_ingredients(bad_ingredients)
看起来having_good_ingredients
像这样:
def having_good_ingredients(query, good_ingredients) do
if Enum.count(good_ingredients) > 0 do
query
|> having(fragment("array_agg(t2.name) && (?)::varchar[]", ^good_ingredients))
else
query
end
end
这可行,但它会抓取满足 good_stacks 数组中任何值的所有值,我希望它们仅在所有堆栈都工作时才满足,即如果我的数组中有 [A, C]返回具有 A 和 C 的值,而不仅仅是 A 而不仅仅是 C。
有人有想法么?