我正在尝试连接两个表并输出它们并按字母顺序按order by coalesce(tableA.name, tableB.name)
(非order by tableA.name, tableB.name
)这两个字段对它们进行排序,因此结果应该是这样的:
tableA.name tableB.name
A null
B null
null C
D null
null E
在纯SQL中它工作正常,但是当我尝试使用QueryDSL时,它会向生成的select语句添加额外的列,并仅按第一个指定的列进行排序:
//java code
query.orderBy(qTableA.name.coalesce(qTableB.name).asc());
//generated sql code
SELECT ...
COALESCE(tablea_.NAME, tableb_.NAME) AS col_9_0_
FROM ...
WHERE ...
ORDER BY tablea1_.NAME ASC
有人能说出为什么会这样做,是否有可能让它像我期望的那样工作?
答案 0 :(得分:0)
尝试一下:
final Coalesce<String> coalesce =
new Coalesce<>(String.class).add(optionalA).add(optionalB);
在选择字段中使用合并,因此在order by子句中使用
:.orderBy(coalesce.asc()) // or desc()