我在MySQL中运行如下的SQL查询:
select *
from (
select 2 as o,1 as t from dual
union
select 1 as o,2 as t from dual
) x
order by if((select 1),o,t);
效果很好,但是当我在if
语句中使用列相对位置时,它不起作用。
如何在if
声明的ORDER BY
中使用列相对位置?
select *
from (
select 2 as o,1 as t from dual
union
select 1 as o,2 as t from dual
) x
order by if((select 0),1,2);
答案 0 :(得分:1)
我不确定你真正的困惑是什么。当整数出现在order by
中时,则将其视为列号。对整数的任何其他使用都被解释为表达式。
已从SQL标准中删除列号的使用。因此,在将来的版本中无法保证在任何特定数据库中使用它。最好使用列名。
答案 1 :(得分:0)
我认为您希望根据两列标准对查询进行排序,如果我是正确的,您可以使用以下内容:
@Transient
public StatusInfo getLatestStatusInfo() {
if ( statusInfos.isEmpty() ) {
return null;
}
else if ( statusInfos.size() == 1 ) {
return statusInfos.get( 0 );
}
else {
// you could add logic here to do the sort in-memory
// for cases where you may have the full collection
// but still want to obtain the last entry ...
}
}
注意:如果您不想删除重复值作为性能问题,请使用...
order by
case when (your criteria)
then column1
else column2
end;
代替union all
。