【问题标题】:Why are my SQL queries yielding a different order?为什么我的 SQL 查询会产生不同的顺序?
【发布时间】:2021-03-10 14:38:35
【问题描述】:

我有一张这样的桌子:

Name     Seats
101      60
102      40
202      100
201      20

所有数据都不能为空,因此房间的每个名称都将拥有一个归属的座位数。现在这是我的问题:

当我运行这个 SQL 查询时:

select name from rooms

我得到这个输出:

Name
101      
102      
201      
202      

当我运行这个 SQL 查询时:

select seats from rooms

我得到这个输出:

Name
60
40
100
20

请注意,在我的第一个查询 select name from rooms 中,表中值的顺序发生了变化,而在我的第二个查询中,当我要找座位时,顺序保持不变。为什么会这样?

如何修复我的 SQL 查询,使其不会重新排序我的房间名称?

我希望它保持秩序并输出:

Name    
101      
102      
202      
201      

【问题讨论】:

  • 没有 ORDER BY 子句的 SELECT 语句返回的行的顺序是未定义的。
  • @forpas 我明白了,所以我想我一直很幸运

标签: mysql sql sql-order-by derby


【解决方案1】:

SQL 表代表无序 集合。 SQL 结果集是无序的,除非有一个明确的ORDER BY 对应于最外层的SELECT

期间。

如果您没有ORDER BY,您应该对结果的排序没有任何期望。顺序可以从一次运行更改为另一次。

而且,即使您有 ORDER BY,如果您有关联(即具有相同值的键),那么它们可以从一个运行到下一个任意排序。

【讨论】:

  • ooooooooooooooooooh 所以我一直很幸运
  • 知道如何使这两个查询以相同的顺序排列吗?我不确定我可以订购什么来使它们匹配
  • @JohnnyRobertson 。 . .包括order by,例如order by name
  • 哦,是的,你是对的,我现在明白了,谢谢!
  • @JohnnyRobertson 是的,你很幸运。只要确保您在需要时明确要求订购即可。
【解决方案2】:

select name 查询可能只读取索引(这称为覆盖查询),而不是表本身,从而产生不同的顺序。但原则是,您不应该依赖任何特定的顺序,除非它由最外层查询的 order by 子句指定。

【讨论】:

  • 是的,它似乎是按照 101->102->201->202 的顺序排列的
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多