是否在不重新创建表的情况下向表添加唯一列?我有大约50万条记录。只是想分配一个唯一的号码。我不能删除它,因为数据库系统之间存在很多依赖关系。该表还包含多个视图,因此重新创建一个视图将不会在下游更新任何内容。
设置id =唯一值
set id = cast(floor(random()* 1000000000)as int),其中id为空
不起作用。
显然不能使用窗口函数row_number()或()来分配此函数。还有其他想法吗?
答案 0 :(得分:0)
大家好,这是我用于此的解决方法。我的表有406,203条记录,我需要分配唯一值而不删除它。我正在Redshift中工作-
更新表名 设置id = cast(floor(random()* 1000000000)as int),其中id为null;
-其中一些值不是唯一的,请拔出下面重复的id值并将其设置回null
创建临时表的计数为 选择ID,计数(*) 来自table_name 按编号分组 按2 desc订购;
更新表名 set id = null where id in(从count中选择id,其中count> 1);
-为重复的空值设置唯一值
更新表名 设置id = cast(floor(random()* 20000000.34)as int),其中id为null;
选择计数(*),计数(不同ID) 来自table_name; -现在是独一无二的!