Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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_Sql_Jooq - Fatal编程技术网

Java jooq嵌套选择和类型安全

Java jooq嵌套选择和类型安全,java,sql,jooq,Java,Sql,Jooq,我正在尝试用jooq编写以下sql: 选择SUM`SUM`作为`total` 从…起 选择 MIN`num_视图`AS`sum` 来自“事实”愿望列表` 按`id分组` AS t 我发现了一些与此相关的东西: 嵌套表= tablecreate.selectMYTABLE.ID, minMYTABLE.NUM_视图 .asviews .从我的表格 .groupByMYTABLE.ID; 返回create.selectsumField nested.fieldview .fromnested .fe

我正在尝试用jooq编写以下sql:

选择SUM`SUM`作为`total` 从…起 选择 MIN`num_视图`AS`sum` 来自“事实”愿望列表` 按`id分组` AS t 我发现了一些与此相关的东西:

嵌套表= tablecreate.selectMYTABLE.ID, minMYTABLE.NUM_视图 .asviews .从我的表格 .groupByMYTABLE.ID; 返回create.selectsumField nested.fieldview .fromnested .fetchOne.value1.longValue;
然而,不知何故,我已经失去了类型安全。我觉得我做错了什么,但我看不出来。关于如何改进这一点有什么想法吗?

不幸的是,在jOOQ中使用派生表无法实现100%的类型安全性,因为Java编译器无法真正证明派生表包含列。但是,通过重用视图字段,您的使用肯定会得到改进。只需将其分配给一个局部变量

字段视图=minMYTABLE.NUM_views.asviews; 嵌套表= tablecreate.selectMYTABLE.ID,最小视图 .从我的表格 .groupByMYTABLE.ID; 返回create.selectsumnested.FieldView .fromnested .fetchOne.value1.longValue; 请注意,该方法如何允许维护类型引用,前提是您传入的字段确实存在于派生表中(使用其给定名称),并且它与参数字段的类型匹配

使用窗口函数的替代方法 请注意,您的查询可以使用以下方法重写

SELECT SUM(MIN(num_views)) OVER ()
FROM fact_wishlist
GROUP BY id
LIMIT 1
或在jOOQ中:

回来 create.selectsumminMYTABLE.NUM\u VIEWS.over .从我的表格 .groupByMYTABLE.ID .limitinline1 .单身 .价值1.长期价值;
这当然取决于您的数据库是否支持窗口功能,它可能比双聚合解决方案快/慢,也取决于供应商。

谢谢,回答得很好。过度版本适合我,虽然我觉得它不那么直观,但它肯定更简洁,所以我同意这一点: