我有一个大表,需要在Teradata中为其添加行号。我在已经叫做row_num的表上有一列,但我需要用实际的数字来更新它。我试图使用下面的代码,但它不会工作。使用行号更新列
update database.time
set row_num = INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE 1
NO CYCLE))
任何帮助,将不胜感激。谢谢!!
我有一个大表,需要在Teradata中为其添加行号。我在已经叫做row_num的表上有一列,但我需要用实际的数字来更新它。我试图使用下面的代码,但它不会工作。使用行号更新列
update database.time
set row_num = INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE 1
NO CYCLE))
任何帮助,将不胜感激。谢谢!!
如果你有一个标识列,它唯一标识每一行,你可以这样做:
update t
set t.row_num = tt.seqnum
from database.time t,
(select t.*, row_number() over (order by id) as seqnum
from database.time t
) tt
where t.id = tt.id;
这不是Teradata语法 –
update t
from mytable t
,(select t.*
,cast(row_number() over (order by id) as bigint) as rn
from mytable t
) tt
set row_num = tt.rn
where t.id = tt.id
;
P. - @ dnoeth将会建议,对于一张大桌子,您将使用CTAS而不是UPDATE,这是完全正确的。 –
而当Kristen运行查询时,它将失败并显示数字溢出,因为ROW_NUMBER默认返回一个Int。但是,原始更新也会发生这种情况:-) – dnoeth
@dnoeth - 不一定,取决于版本和配置:-)只是为了安全起见 - 我在答案中添加了CAST –
有多大*一大桌*? – dnoeth
该表为〜4b个记录 – Kristen
为什么要为该表分配序列号? – dnoeth