代码之家  ›  专栏  ›  技术社区  ›  AFHood

在创建/插入teradata时添加序列号

  •  3
  • AFHood  · 技术社区  · 15 年前

    在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
    ;
    
    3 回复  |  直到 13 年前
        1
  •  7
  •   Carlos A. Ibarra    15 年前

    你可以这样做:

    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 ;
    
        2
  •  3
  •   Rob Paller    15 年前

    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可能不是数据访问或与数据模型中其他表联接的最佳主索引。它只是表明你 能够 用它作为桌子上的圆周率。

        3
  •  1
  •   Ted Elliott    15 年前

    这也是可行的:

    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 ;