【发布时间】:2014-08-24 07:49:29
【问题描述】:
我使用的是 Oracle 数据库 10g 企业版 10.2.0.3.0 - 64 位。 我已经创建了一些日期并将其插入到带有字段的表“转移”中
tsid(数字,主键), 名称(varchar 2(20)), desc(varchar 2(30)), 数量(数量), 日期(时间戳)。
我有另一个架构 SHE 具有相同的表和字段。
我使用以下查询将数据复制到 SHE 架构,
INSERT INTO SHE.TRANSFERS ( SELECT * FROM HE.TRANSFERS );
在模式 HE 和 SHE 中查询表时,我得到的日期顺序不同。
select * from transfers;
我应该怎么做才能在两个架构中以相同的顺序获取行?
请解释一下数据库行排序。
【问题讨论】:
-
在 SQL 中,查询的结果没有定义的顺序,除非有 ORDER BY 子句。数据库没有义务在没有 ORDER BY 的情况下以任何特定顺序返回行。事实上,同一查询的不同执行顺序可能不同。
-
我的回答是否解决了您的问题?你能把它标记为接受吗?谢谢:)
-
是的,很简单。我们可以通过 tsid 使用 order 来解决这个问题。但我的问题是为什么不同的模式会返回以不同顺序排列的相同数据。如果我想将数据复制到另一个模式表以获得相同的顺序,我应该怎么做。我的情况是我无法在 select 语句中添加 order by。如果我能这样做就更好了
INSERT INTO SHE.TRANSFERS ( SELECT * FROM HE.TRANSFERS ORDER BY TSID ); -
@JimGarrison 正如您所说,不同执行的顺序可能不同,我多次尝试选择该选项。但是当我在一个模式中执行时,我得到了相同的顺序。请注意,我没有使用 order by 子句
-
我重复一遍:数据库不需要以任何顺序返回行,除非您指定“ORDER BY”。 SQL的操作就是这样定义的。 “数据库中”的行没有顺序。您在查询时指定您想要的内容。省略 ORDER BY 告诉数据库您不在乎。由于底层实现,您得到看起来像特定订单的东西这一事实是巧合。在任何情况下你都不能依赖它。
标签: sql database oracle10g database-schema