是否有DBMS独立的方式用递增/递增数字填充给定的列?

时间:2018-10-25 14:50:05

标签: sql

可以说我有一个带有varchar列和integer列的表。 varchar列已填充,整数列均为空:

enter image description here

我想执行一个signle SQL更新语句,该语句用这样的升序数填充整数列:

enter image description here

此更新语句不应特定于DBMS,而应在所有流行的SQL DBMS上运行。有办法吗?

我编辑了varchar列的内容,因为我的问题的先前版本暗含了它们的编号和区别。它们不是-它们是完全随机的。

2 个答案:

答案 0 :(得分:2)

我会使用subquery

UPDATE t
     SET my_integer_column = (SELECT COUNT(*) FROM t t1 WHERE t1.My_Varchar_Column <= t.My_Varchar_Column);

答案 1 :(得分:0)

如果My_Varchar_Column是唯一的,则可以使用ROW_NUMBER

UPDATE table_name
SET my_integer_column = 
        (SELECT rn
        FROM  (SELECT t.*, ROW_NUMBER() OVER(ORDER BY My_Varchar_Column) AS rn
               FROM table_name t) sub
        WHERE table_name.My_Varchar_Column = sub.My_Varchar_Column);     

db<>fiddle demo

它将在PostgreSQL / MySQL 8.0 / Maria DB / SQLite 3.25 / Oracle / SQL Server等现代RDBMS上运行。