Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过使用JOOQ检查聚合数组中的特定元素来获得结果集?_Java_Postgresql_Jooq - Fatal编程技术网

Java 如何通过使用JOOQ检查聚合数组中的特定元素来获得结果集?

Java 如何通过使用JOOQ检查聚合数组中的特定元素来获得结果集?,java,postgresql,jooq,Java,Postgresql,Jooq,我想按查询中聚合数组中的特定值筛选结果 下面是对这个问题的一点描述。 这部分属于花园。花园属于区,区属于省。 用户有多个部分。这些部分属于他们的花园,属于他们的地区,属于他们的省 我想在区域数组中获取值为2的用户ID。 我试着使用任何一个操作符,但它不能正常工作。(语法错误) 任何帮助都将不胜感激 ps:这是可以使用普通SQL编写的 rs = dslContext.select( field("user_id"),

我想按查询中聚合数组中的特定值筛选结果

下面是对这个问题的一点描述。 这部分属于花园。花园属于区,区属于省。 用户有多个部分。这些部分属于他们的花园,属于他们的地区,属于他们的省

我想在区域数组中获取值为2的用户ID。 我试着使用任何一个操作符,但它不能正常工作。(语法错误) 任何帮助都将不胜感激

ps:这是可以使用普通SQL编写的

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()
,但就编译错误而言,这不重要