1

如果我运行以下查询:

select * from mysql.user order by abcdef;

MySQL 抛出以下错误:

错误 1054 (42S22):“订单子句”中的未知列“abcdef”

如果我运行以下类似查询:

select * from mysql.user order by "abcdef";

MySQL 现在运行查询并忽略 order by 子句(因为 mysql.user 表缺少名为 'abcdef' 的列)。

这是 MySQL 中的错误吗?当短语在引号中时,为什么您希望 order by 静默失败?在不存在的列上运行 order by 时,错误消息不合适吗?

4

3 回答 3

4

它不会忽略它,它按字符串“abcdef”排序,而不是按列排序。它完全按照您的要求进行:按任意字符串排序(很可能什么都不做)。

大多数 RDBMS 不接受按常量排序(这没有意义),但 MySQL 可以。

于 2010-11-19T16:56:56.183 回答
3

当您不使用引号时,它会假定您指的是不存在的列名。

这是正确的功能

于 2010-11-19T16:56:27.170 回答
-1

order by 需要您要订购的字段,如果您希望它升序,则将 asc 放在它旁边,如果您希望它降序,则将 desc 如下所示

SELECT *
  FROM mysq.user
 ORDER BY username ASC
于 2010-11-19T16:58:53.573 回答