Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当我尝试两次基于同一列进行排序时,为什么SQL不会抛出错误?_Mysql_Sql_Sql Order By_Multiple Columns - Fatal编程技术网

Mysql 当我尝试两次基于同一列进行排序时,为什么SQL不会抛出错误?

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;

我在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; 

SELECT * from EMPLOYEE ORDER BY NAME ASC, SALARY DESC;
在这种情况下,
名称ASC
第二次是多余的。在这种情况下,为什么SQL不抛出错误/警告?

您的问题是“为什么MySQL(或任何其他数据库)在存在冗余的
ORDER BY
键时不返回警告或错误?”

在编写语言或编译器时,设计者必须决定要处理什么

对所有示例的第一个观察是它们都是有效的SQL。该标准没有说明冗余的按键排序,那么为什么要这样做呢

第二个观察结果是,附加键对结果集没有影响,对结果的影响最小。这甚至会使警告的优先级很低

第三个问题是在哪里停?编译器是否存在以下错误或警告:

  • +0
  • *1
  • 其中1=1
  • 等等等等等等
当努力可以使引擎更好地为每个人工作时,为什么要努力去修复“坏”代码?

你的问题是“为什么MySQL(或任何其他数据库)在存在冗余的
ORDER BY
键时不返回警告或错误?”

在编写语言或编译器时,设计者必须决定要处理什么

对所有示例的第一个观察是它们都是有效的SQL。该标准没有说明冗余的按键排序,那么为什么要这样做呢

第二个观察结果是,附加键对结果集没有影响,对结果的影响最小。这甚至会使警告的优先级很低

第三个问题是在哪里停?编译器是否存在以下错误或警告:

  • +0
  • *1
  • 其中1=1
  • 等等等等等等
当努力可以使引擎更好地为每个人工作时,为什么要努力修复“坏”代码

  • 语法是正确的,这就是为什么没有给出错误

  • 同样的结果,因为按顺序工作的顺序如下

  • 按姓名(1)ASC、薪资(2)DESC、姓名(3)ASC从员工订单中选择*

    因此,没有问题,只要放松并重新检查即可

  • 语法是正确的,这就是为什么没有给出错误

  • 同样的结果,因为按顺序工作的顺序如下

  • 按姓名(1)ASC、薪资(2)DESC、姓名(3)ASC从员工订单中选择*


    因此,没有问题只要放松并重新检查一下

    有时候,表面上相似的东西实际上并不相同。它会发出什么警告?也许它不同意你关于什么构成冗余的观点?为什么应该?按同一列排序两次并没有错。这只是多余的,对你的情况没有影响。它可能被优化器扔掉了。有时,表面上相似的东西实际上并不相同。它会发出什么警告?也许它不同意你关于什么构成冗余的观点?为什么应该?按同一列排序两次并没有错。这只是多余的,对你的情况没有影响。无论如何,它可能会被优化器丢弃。“那么为什么要做任何事情呢?”-所编写的代码是完全有效的,并且可能不符合用户的意图(实际上是多余的)。在大多数语言中,这通常是发出警告的一个很好的理由。“那么为什么要做任何事情呢?”——所编写的代码完全有效,并且可能没有达到用户的预期效果(实际上是多余的)。在大多数语言中,这通常是发出警告的一个很好的理由。