【发布时间】:2021-10-30 15:25:08
【问题描述】:
我需要在 hql 查询中为 order by 设置条件。
- sortBy(列名)
- sortOrder(升序或降序)
在我的 hql 查询中有 3 个表加入
select a from TableA a, TableB b, TableC c WHERE a.column1 = b.column2 AND b.column1 = c.column2 ORDER BY CASE WHEN :sortBy = column3 THEN a.column3 WHEN :sortBy = column4 THEN b.column4 ELSE c.column5 END CASE WHEN :sortOrder = 'asc' THEN asc ELSE desc END
在这个查询中,第二个CASE WHEN 条件出现错误
我也尝试过下面的查询
select a from TableA a, TableB b, TableC c WHERE a.column1 = b.column2 AND b.column1 = c.column2 ORDER BY CASE WHEN :sortBy = column3 THEN (CASE WHEN :sortOrder = 'asc' THEN 'a.column3 asc' ELSE 'a.column3 desc' END) WHEN :sortBy = column4 THEN (CASE WHEN :sortOrder = 'asc' THEN 'b.column4 asc' ELSE 'b.column4 desc' END) ELSE (CASE WHEN :sortOrder = 'asc' THEN 'c.column5 asc' ELSE 'c.column5 desc' END) END
在这个查询中,响应没有排序
你能指导我这个查询有什么问题吗?
【问题讨论】:
-
CASE子句中的CASE表达式需要用逗号分隔。这是一个错字问题。 -
@TimBiegeleisen 不需要在
ORDER BY中加逗号 -
您确实需要在两个
CASE表达式之间使用逗号,但实际上我认为需要重写逻辑顺序。 -
如果您不添加示例数据,这里的任何人都不太可能为您提供帮助。