Mysql 当我尝试两次基于同一列进行排序时,为什么SQL不会抛出错误?
我在5.7.22版本的MYSQL数据库中有一个表Mysql 当我尝试两次基于同一列进行排序时,为什么SQL不会抛出错误?,mysql,sql,sql-order-by,multiple-columns,Mysql,Sql,Sql Order By,Multiple Columns,我在5.7.22版本的MYSQL数据库中有一个表EMPLOYEE。我编写了一个select查询: SELECT * from EMPLOYEE ORDER BY NAME ASC, SALARY DESC, NAME ASC; 其结果与 SELECT * from EMPLOYEE ORDER BY NAME ASC, SALARY DESC; 类似的结果 SELECT * from EMPLOYEE ORDER BY NAME ASC, SALARY DESC, NAME DESC;
EMPLOYEE
。我编写了一个select查询:
SELECT * from EMPLOYEE ORDER BY NAME ASC, SALARY DESC, NAME ASC;
其结果与
SELECT * from EMPLOYEE ORDER BY NAME ASC, SALARY DESC;
类似的结果
SELECT * from EMPLOYEE ORDER BY NAME ASC, SALARY DESC, NAME DESC;
与
SELECT * from EMPLOYEE ORDER BY NAME ASC, SALARY DESC;
在这种情况下,名称ASC
第二次是多余的。在这种情况下,为什么SQL不抛出错误/警告?您的问题是“为什么MySQL(或任何其他数据库)在存在冗余的ORDER BY
键时不返回警告或错误?”
在编写语言或编译器时,设计者必须决定要处理什么
对所有示例的第一个观察是它们都是有效的SQL。该标准没有说明冗余的按键排序,那么为什么要这样做呢
第二个观察结果是,附加键对结果集没有影响,对结果的影响最小。这甚至会使警告的优先级很低
第三个问题是在哪里停?编译器是否存在以下错误或警告:
+0
*1
其中1=1
- 等等等等等等
ORDER BY
键时不返回警告或错误?”
在编写语言或编译器时,设计者必须决定要处理什么
对所有示例的第一个观察是它们都是有效的SQL。该标准没有说明冗余的按键排序,那么为什么要这样做呢
第二个观察结果是,附加键对结果集没有影响,对结果的影响最小。这甚至会使警告的优先级很低
第三个问题是在哪里停?编译器是否存在以下错误或警告:
+0
*1
其中1=1
- 等等等等等等
因此,没有问题只要放松并重新检查一下有时候,表面上相似的东西实际上并不相同。它会发出什么警告?也许它不同意你关于什么构成冗余的观点?为什么应该?按同一列排序两次并没有错。这只是多余的,对你的情况没有影响。它可能被优化器扔掉了。有时,表面上相似的东西实际上并不相同。它会发出什么警告?也许它不同意你关于什么构成冗余的观点?为什么应该?按同一列排序两次并没有错。这只是多余的,对你的情况没有影响。无论如何,它可能会被优化器丢弃。“那么为什么要做任何事情呢?”-所编写的代码是完全有效的,并且可能不符合用户的意图(实际上是多余的)。在大多数语言中,这通常是发出警告的一个很好的理由。“那么为什么要做任何事情呢?”——所编写的代码完全有效,并且可能没有达到用户的预期效果(实际上是多余的)。在大多数语言中,这通常是发出警告的一个很好的理由。