按超出范围的序号列号排序

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

(按lastnamefirstname 排序)

但是,如果您指定一个不存在的列号,例如我的示例中的 4,您会收到错误:Unknown column '4' in 'order clause'

我有一些遗留的用户界面代码,其中预先不知道从各种查询返回的列数。由于此代码的结构,要添加排序工具,它​​将帮助我能够指定不存在的列号而不会出错。 (如果数字超出实际列范围,则排序顺序无关紧要。)

有没有办法在 SQL 级别以某种方式做到这一点?也许是这样的:

order by min(3, number_of_columns_in_result_set)

【问题讨论】:

您应该使用名称而不是序数。 不行。即使您在 ORDER BY 中使用数字,它也被用作文字 - 因此您不能使用表达式。而且这个值解析是在查询执行之前进行的,所以在解析查询文本时,你要引用的值是不存在的。 我可以看到也许可以使用准备好的语句来完成。发现列存在与否后下一步是什么? 我不明白为什么有人说“你应该这样做”并得到所有的点和我的问题,基于处理真正的遗留代码(你们从来不需要在星期五之前完成一些事情吗? ?)得到downvote仇恨。如果我写了同样的问题,但措辞是“我只是好奇有没有可能”,你可能会没事。 【参考方案1】:

不,这是不可能的。但是您可以将其包装在准备好的语句中并处理该子结果集(谢谢 FaNo_FN)。

【讨论】:

以上是关于按超出范围的序号列号排序的主要内容,如果未能解决你的问题,请参考以下文章

向量下标超出范围 C++ 合并排序

k元组排序中的python列表索引超出范围

C++ 调试断言失败。向量下标超出范围

对于char型的,如果超出范围怎样算?

向量下标超出范围,错误仅在调试模式下显示

多维数组超出范围