在 oracle 中,我们将在创建此表时在 select 上使用 rownum。现在在 teradata 中,我似乎无法让它工作。除非我一起使用 3 列,否则没有可以排序的列并具有唯一值(大量重复)。
旧的方式是这样的,
create table temp1 as
select
rownum as insert_num,
col1,
col2,
col3
from tables a join b on a.id=b.id
;
在 oracle 中,我们将在创建此表时在 select 上使用 rownum。现在在 teradata 中,我似乎无法让它工作。除非我一起使用 3 列,否则没有可以排序的列并具有唯一值(大量重复)。
旧的方式是这样的,
create table temp1 as
select
rownum as insert_num,
col1,
col2,
col3
from tables a join b on a.id=b.id
;
您可以这样做:
create table temp1 as
(
select
sum(1) over( rows unbounded preceding ) insert_num
,col1
,col2
,col3
from a join b on a.id=b.id
) with data ;
Teradata 从 V2R6.x 开始在其表上具有标识列的概念。这些列与 Oracle 的序列概念的不同之处在于分配的数字不保证是连续的。Teradata 中的标识列仅用于保证行唯一性。
例子:
CREATE MULTISET TABLE MyTable
(
ColA INTEGER GENERATED BY DEFAULT AS IDENTITY
(START WITH 1
INCREMENT BY 20)
ColB VARCHAR(20) NOT NULL
)
UNIQUE PRIMARY INDEX pidx (ColA);
当然,ColA 可能不是用于数据访问或与数据模型中的其他表连接的最佳主索引。它只是表明您可以将其用作桌面上的 PI。
这也有效:
create table temp1 as
(
select
ROW_NUMBER() over( ORDER BY col1 ) insert_num
,col1
,col2
,col3
from a join b on a.id=b.id
) with data ;