Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 使用CASE表达式的JOOQ排序_Java_Mysql_Sql_Jooq - Fatal编程技术网

Java 使用CASE表达式的JOOQ排序

Java 使用CASE表达式的JOOQ排序,java,mysql,sql,jooq,Java,Mysql,Sql,Jooq,我使用JOOQ已经半年了,必须说它非常棒:) 我遇到的问题是:我试图生成普通SQL查询,其中包含orderby子句和case。。。当语句实现自定义排序顺序时,如所述 但是,当我使用方法并传递Strings的Collection时,我在查询中得到以下orderby子句: order by case `type` when ? then ? when ? then ? when ? then ? when ? then ? when ? the

我使用JOOQ已经半年了,必须说它非常棒:)

我遇到的问题是:我试图生成普通SQL查询,其中包含
orderby
子句和
case。。。当
语句实现自定义排序顺序时,如所述

但是,当我使用方法并传递
String
s的
Collection
时,我在查询中得到以下
orderby
子句:

order by 
    case `type` 
    when ? then ?
    when ? then ?
    when ? then ? 
    when ? then ? 
    when ? then ? end asc 
因为我没有使用JOOQ执行查询,所以我需要自己指定这些值,这很不方便

该问题的部分解决方案是使用方法传递从原始值获得的
参数值的
集合
。但是,在这种情况下,占位符仍然存在,并且查询中的order by子句如下所示:

order by 
    case `type` 
    when 'type_a' then ?
    when 'type_b' then ?
    when 'type_c' then ? 
    when 'type_d' then ? 
    when null then ? end asc 
这是预期的行为还是可以被视为bug并应报告

现在,我使用方法解决了这个问题,用递增的整数值将
Map
传递给它。这个方法也有一个小问题,因为它返回的
SortField
实例没有像
asc()
desc()
sort(SortOrder)
这样的方法,所以为了以不同的顺序排序,应该重新生成这个映射

提前感谢您的帮助

要从查询中提取所有绑定值,请使用。排序间接值应该在其中。另见


注意,生成“内联”排序间接值而不是绑定值通常很有用,以防止将来出现这种情况。就执行计划而言,我认为不会有任何区别。我已经为此注册了。

“这个方法也有一个小问题,因为它返回的SortField实例没有像asc()、desc()或sort(SortOrder)这样的方法,所以为了以不同的顺序排序,应该重新生成这个映射。”-嗯,返回一个
SortField
,它有
asc()
desc()
方法。你是说打电话给他们可能没有效果?你能给我举个例子吗?根据Javadoc
SortField
是一个没有
asc()
desc()
排序(SortOrder)
方法的接口。。。还是我遗漏了什么?嗯,我不知道
Query.getBindValues()
-这提供了新的可能性:)谢谢你的回答,也谢谢你为我的请求注册了这个问题!