首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ecto查询获取满足array_aggregator中的所有值的所有值,而不是任何值?

Ecto查询获取满足array_aggregator中的所有值的所有值,而不是任何值?
EN

Stack Overflow用户
提问于 2019-05-23 00:11:38
回答 1查看 235关注 0票数 0

不知道是否有人可以帮助我解决数组聚合器的问题

我有一个查询,它使用一个连接表进行连接,然后过滤掉给定数组中的所有值,并过滤掉另一个数组中的值。

代码如下所示:

代码语言:javascript
复制
      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,如下所示:

代码语言:javascript
复制
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。

有谁有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-05-23 16:44:53

我相信您希望使用@>运算符,而不是重叠&&运算符:

代码语言:javascript
复制
having(fragment("array_agg(t2.name) @> (?)::varchar[]", ^good_ingredients))

参考:https://www.postgresql.org/docs/current/functions-array.html#ARRAY-OPERATORS-TABLE

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56261044

复制
相关文章

相似问题

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