首页 > 解决方案 > 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 版本中获得相同的结果?

标签: mysqlsql-order-bymariadbunion

解决方案


否则,您可以通过外部移动订单:

SELECT 
    ID, Name
FROM
    (SELECT '' AS ID, '' AS Name UNION SELECT 
        ID, Name
    FROM
        yourTable) AS yourTableTmp
ORDER BY Name;

推荐阅读