mysql - MySQL - ORDER BY 与 UNION 的一部分
问题描述
很长一段时间以来,我一直使用这种方法来订购我的列表(用于 html 选择):
SELECT '' AS ID, '' AS Name UNION
SELECT ID, Name FROM (SELECT ID, Name FROM myTable ORDER BY Name) AS myTableTmp
但是在更新到新的 MySQL(MariaDB) 版本后,我发现这种排序不再起作用了。就像这里解释的那样,它与 SQL 标准冲突:mysql - order by inside subquery
获得所需订单的最佳做法是什么?或者我应该使用简单的方法,并添加LIMIT 65000
到嵌套查询?
编辑:
好吧,我原来的例子不够精确,所以人们能够误解我。这是更正的示例:
CREATE TABLE IF NOT EXISTS `myTable` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(120) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;
INSERT INTO `myTable` (`ID`, `Name`) VALUES
(1, 'Banana'),
(2, 'Apple'),
(3, NULL);
如果我选择旧版本:
SELECT '0' AS ID, '-' AS Name UNION
SELECT ID, Name FROM (SELECT ID, Name FROM myTable ORDER BY Name) AS myTableTmp
我得到:
0 -
3 NULL
2 Apple
1 Banana
我如何在新的 MySQL 版本中获得相同的结果?
解决方案
否则,您可以通过外部移动订单:
SELECT
ID, Name
FROM
(SELECT '' AS ID, '' AS Name UNION SELECT
ID, Name
FROM
yourTable) AS yourTableTmp
ORDER BY Name;
推荐阅读
- node.js - 尽管服务帐户的角色正确,但机密管理员访问被拒绝
- c++ - 在带有 C++ 文件的 ios 插件上找不到“字符串”文件
- python - win32com 从 * .exe 或 * .py 运行时有不同的行为
- sql-server - 使用自制软件安装的驱动程序版本
- python - 尝试发布时出现服务器错误,但在删除/获取/放入 django + vue js 时没有
- android-recyclerview - Xamarin.Android如何记住recyclerview中项目的位置
- python - 机器学习 模型过拟合
- amazon-web-services - 获得使用 2-Protocol Hours 账单。有人知道 AWS 中的这些费用吗?
- angular - 角度 - 如何使用开关将输入字段更改为只读
- flutter - 在 Build 方法中使用 FutureBuilder