按超出范围的序号列号排序
Posted
技术标签:
【中文标题】按超出范围的序号列号排序【英文标题】:Order by ordinal column number that is out of range 【发布时间】:2021-11-03 04:24:58 【问题描述】:可以按结果集中的序号对 mysql 结果进行排序,如下所示:
select id, firstname, lastname from customer order by 3,2
(按lastname
和firstname
排序)
但是,如果您指定一个不存在的列号,例如我的示例中的 4,您会收到错误:Unknown column '4' in 'order clause'
我有一些遗留的用户界面代码,其中预先不知道从各种查询返回的列数。由于此代码的结构,要添加排序工具,它将帮助我能够指定不存在的列号而不会出错。 (如果数字超出实际列范围,则排序顺序无关紧要。)
有没有办法在 SQL 级别以某种方式做到这一点?也许是这样的:
order by min(3, number_of_columns_in_result_set)
【问题讨论】:
您应该使用名称而不是序数。 不行。即使您在 ORDER BY 中使用数字,它也被用作文字 - 因此您不能使用表达式。而且这个值解析是在查询执行之前进行的,所以在解析查询文本时,你要引用的值是不存在的。 我可以看到也许可以使用准备好的语句来完成。发现列存在与否后下一步是什么? 我不明白为什么有人说“你应该这样做”并得到所有的点和我的问题,基于处理真正的遗留代码(你们从来不需要在星期五之前完成一些事情吗? ?)得到downvote仇恨。如果我写了同样的问题,但措辞是“我只是好奇有没有可能”,你可能会没事。 【参考方案1】:不,这是不可能的。但是您可以将其包装在准备好的语句中并处理该子结果集(谢谢 FaNo_FN)。
【讨论】:
以上是关于按超出范围的序号列号排序的主要内容,如果未能解决你的问题,请参考以下文章