Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 Rownum使结果以无序方式显示结果_Mysql_Sql_Oracle_Oracle Sqldeveloper - Fatal编程技术网

Mysql Rownum使结果以无序方式显示结果

Mysql Rownum使结果以无序方式显示结果,mysql,sql,oracle,oracle-sqldeveloper,Mysql,Sql,Oracle,Oracle Sqldeveloper,我有一个查询,其末尾的rownum>=15。 当我运行这个查询时,它会正确地显示结果,这意味着它会一行一行地显示所有15行,并且显示的行的顺序不会改变, 但是,当我从查询中删除rownum>=15时,结果不是按顺序1,2,3显示的,而是按顺序1,3,2显示的。 你们的任何想法都会对我解决这个问题非常有帮助。这是许多人长期以来的疑问 这种行为的原因可分析如下 您的数据库必须处于串行模式 Oracle文档说明: Oracle数据库通过以下两种方式之一将数据插入表中: 串行模式:在传统的插入操作

我有一个查询,其末尾的
rownum>=15

当我运行这个查询时,它会正确地显示结果,这意味着它会一行一行地显示所有15行,并且显示的行的顺序不会改变,
但是,当我从查询中删除
rownum>=15
时,结果不是按顺序1,2,3显示的,而是按顺序1,3,2显示的。

你们的任何想法都会对我解决这个问题非常有帮助。

这是许多人长期以来的疑问

这种行为的原因可分析如下

您的数据库必须处于串行模式

Oracle文档说明:

Oracle数据库通过以下两种方式之一将数据插入表中:

  • 串行模式:在传统的插入操作中,数据库重用表中的可用空间,将新插入的数据与现有数据交错

  • 并行模式:在直接路径插入操作期间,数据库在表中现有数据之后追加插入的数据。不重用现有数据中的可用空间,并且忽略引用完整性约束。这些程序结合起来可以提高性能

在常规模式下,以下记录

insert into users
  values( 1, 'Elvis' ), ( 2, 'Jackson' ), ( 3, 'Madonna' );
可能导致以下存储顺序。
因此,基本选择将产生相同的结果

2   Jackson
1   Elvis
3   Madonna
在直接路径插入中,数据被追加到表的末尾,而不是使用当前分配给表的现有空间

为了强制使用直接路径插入,我们使用提示

这将在表的末尾追加行。
因此,Basic select将按插入顺序获取记录

但在选择直接路径模式之前添加的记录会发生什么情况?插入时,它们存在于相同的位置。为了解决此类问题,我们必须使用以下任何一种按顺序排列的选项:

  • 行id——插入行的地址id。(我的观察结果是,每个表的顺序都是一样的)。使用
    按rowid排序
  • 索引的字段--例如,
    按用户id排序
  • --在适当的字段上定义索引,并使用此提示按照为索引定义的顺序获取记录


在您的数据上,除了选择合适的订购解决方案并检索外,别无选择。

这是MySQL还是Oracle?这个问题所能解决的问题是“如果你想对结果进行排序,请使用
orderby
”,这样你就知道结果的方向,但是如果你发布查询,有人将能够准确地指出你需要的-what-
orderby
子句。如果你发布了示例数据和你尝试的查询。。如果查询太大,让我看看是否可以在某个子查询中生成rownum,并且使用rownum>=15?或者只是用它来进行一些查询?在我看来,rownum>=15永远不会在Oracle中给出结果,除非您定义了“rownum”短接某些子查询后的列别名。我在子查询中给出了order by,但在外部查询中使用了rownum。插入行的顺序与查询返回行的顺序完全无关。这个答案唯一准确的部分是,他们需要添加一个
order by
子句。OP的疑问是,如果不使用order by,为什么它们不会按插入顺序返回?不确定你从哪里得到这个想法,OP只是询问两个查询,以及为什么它们以不同的顺序返回结果。@JeffreyKemp:OP没有按插入顺序使用单词,你说得对。但是,当我读到这篇文章时,我意识到我之前也遇到过类似的问题,这在插入顺序上是真实的。这就是我在回答中的解释。@JeffreyKemp:OP也应该澄清我对他的数据的假设是否正确。
insert /*+ APPEND */ into users
  values( 1, 'Elvis' ), ( 2, 'Jackson' ), ( 3, 'Madonna' );
1   Elvis
2   Jackson
3   Madonna