`array_agg` throwing"找不到数据类型bigint []"的数组类型

时间:2018-02-08 03:16:06

标签: phoenix-framework ecto

在我的数据库中,timeline_items表与tags具有多对多关系,由timeline_items_tags表加入。如果给出了标签ID列表,我希望能够找到与所有这些标签相关联的TimelineItem。例如,让我说我有一个与标签20和10相关联的TimelineItem。鉴于以下查询,我希望这些结果:

[20, 10] -> OK!
[20] -> OK!
[20, 10, 33] -> NOT OK

鉴于这些要求,我试图编写一个查询:

join(TimelineItem, :inner, [ti], tag in "timeline_items_tags", tag.timeline_item_id == ti.id and tag.tag_id in ^tag_ids) |>
group_by([ti], ti.id) |>
having([ti, tag], fragment("array_agg(?)", tag.tag_id) in ^tag_ids)

第一行加入任何匹配甚至单个标记的timeline_items_tags,这太过宽松了。因此,为了确保所有标记都存在,我尝试对TimelineItem进行分组并创建其tag_id的数组。不幸的是,最后一行抛出:

could not find array type for data type bigint[]

发生了什么?有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我很亲密。需要实际结束这一行:

having([ti, tag], fragment("? <@ array_agg(?)", ^tag_ids, tag.tag_id))