【发布时间】:2020-01-25 19:36:52
【问题描述】:
我想通过从另一个表中选择一些数据来创建一个表,同时根据一个(或多个)列对它们进行排序。我提供以下示例,知道它是错误的。一般是否可以实现这样的表格形成,如果可以,是否有任何类似的SQL语句可以实现?
CREATE TABLE NEW_TABLE_NAME AS (
SELECT
*
FROM A_RANDOM_TABLE
)
ORDER BY COLUMN_1,COLUMN_2;
【问题讨论】:
-
表格代表无序集合,因此“按列排序”没有意义。
-
您想在
CTAS中使用order by实现什么目标?即使你的代码是错误的。应该是CREATE **TABLE** NEW_TABLE_NAME AS -
阅读本文的“CTAS using INDEX Hint”部分以及之后的部分。我不够熟悉,无法回答,但也许这会奏效。 dba-oracle.com/t_create_table_select_ctas.htm
-
@GordonLinoff 虽然根据定义堆表确实是无序的,但如果您使用有序集创建一个新表,则通常会以指定的顺序插入行(这与集群有关因素;块中属于单个索引条目的行越多,Oracle 检索指定值的行的速度就越快)。但是,之后插入的新行不会以“正确”的顺序插入;它们将被插入任何有空间的地方(例如,覆盖以前删除的行使用的间隔,或在表格的末尾)。
-
@Whitebeard13 这并不是不可能的,而是您认为这是错误的(我假设)。如果您想要的是,无论何时您从这个新表中选择返回的结果集都会被排序,那么您必须在您的
SELECT语句中使用ORDER BY子句指定它。依赖表中记录的顺序在 SQL 中不会发生。仅在 SELECT 语句中的数据检索上进行排序。这里有一些例外,但它们是非常专业的用例,例如前面评论中提到的物联网。
标签: sql oracle datatable datatables