可以说我有一个带有varchar列和integer列的表。 varchar列已填充,整数列均为空:
我想执行一个signle SQL更新语句,该语句用这样的升序数填充整数列:
此更新语句不应特定于DBMS,而应在所有流行的SQL DBMS上运行。有办法吗?
我编辑了varchar列的内容,因为我的问题的先前版本暗含了它们的编号和区别。它们不是-它们是完全随机的。
答案 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);
它将在PostgreSQL / MySQL 8.0 / Maria DB / SQLite 3.25 / Oracle / SQL Server等现代RDBMS上运行。