Java 如何通过使用JOOQ检查聚合数组中的特定元素来获得结果集?
我想按查询中聚合数组中的特定值筛选结果 下面是对这个问题的一点描述。 这部分属于花园。花园属于区,区属于省。 用户有多个部分。这些部分属于他们的花园,属于他们的地区,属于他们的省 我想在区域数组中获取值为2的用户ID。 我试着使用任何一个操作符,但它不能正常工作。(语法错误) 任何帮助都将不胜感激 ps:这是可以使用普通SQL编写的Java 如何通过使用JOOQ检查聚合数组中的特定元素来获得结果集?,java,postgresql,jooq,Java,Postgresql,Jooq,我想按查询中聚合数组中的特定值筛选结果 下面是对这个问题的一点描述。 这部分属于花园。花园属于区,区属于省。 用户有多个部分。这些部分属于他们的花园,属于他们的地区,属于他们的省 我想在区域数组中获取值为2的用户ID。 我试着使用任何一个操作符,但它不能正常工作。(语法错误) 任何帮助都将不胜感激 ps:这是可以使用普通SQL编写的 rs = dslContext.select( field("user_id"),
rs = dslContext.select(
field("user_id"),
field("gardens_array"),
field("province_array"),
field("district_array"))
.from(table(select(
arrayAggDistinct(field("garden")).as("gardens_array"),
arrayAggDistinct(field("province")).as("province_array"),
arrayAggDistinct(field("distict")).as("district_array"))
.from(table("lst.user"))
.leftJoin(table(select(
field("section.user_id").as("user_id"),
field("garden.garden").as("garden"),
field("garden.province").as("province"),
field("garden.distict").as("distict"))
.from(table("lst.section"))
.leftJoin("lst.garden")
.on(field("section.garden").eq(field("garden.garden")))
.leftJoin("lst.district")
.on(field("district.district").eq(field("garden.district")))).as("lo"))
.on(field("user.user_id").eq(field("lo.user_id")))
.groupBy(field("user.user_id"))).as("joined_table"))
.where(val(2).equal(DSL.any("district_array"))
.fetch()
.intoResultSet();
您的代码正在调用,它对应于PostgreSQL中的表达式any(?)
,其中绑定值在您的情况下是一个String[]
。但您不希望“district\u array”
成为绑定值,而是希望它成为列引用。因此,您可以将arrayagdistinct()
表达式指定给一个局部变量并重用它,或者重新使用字段(“district\u array”)
表达式或复制它:
val(2).equal(DSL.any(字段(“district_数组”,Integer[].class)))
请注意,在使用API时,明确数据类型(例如,
Integer[].class
)通常是一个好主意,或者更好的做法是使用代码生成器。这个问题没有理由得到3次否决票。据我所知,它是完全合法的…无法解析方法'equal(org.jooq.QuantifiedSelect),这正是我得到的错误。谢谢你的建议。你能检查一下语法吗?@AshanTharindu,我犯了一个错误,它应该是Integer[]
,因为你使用的是arrayAgg()
,但就编译错误而言,这不重要