我正在维护下面的表结构。
sortid | id | name 1 | 1 | aa 3 | 2 | cc 4 | 3 | cc 2 | 4 | bb 5 | 5 | dd
其中sortid按名称的升序维护。 现在我想更新名称' dd'以及“排序ID”的方式也会更新为正确的值。
Update table set name="bb" where name like "dd";
更新我的表后应该如下所示。
sortid | id | name 1 | 1 | aa 4 | 2 | cc 5 | 3 | cc 3 | 4 | bb 2 | 5 | aa
答案 0 :(得分:0)
sortid
是在此行之前排序的行数。
所以你可以通过计算行来计算它:
UPDATE MyTable
SET sortid = (SELECT COUNT(*)
FROM MyTable AS T2
WHERE T2.name < MyTable.name) +
(SELECT COUNT(*)
FROM MyTable AS T2
WHERE T2.name = MyTable.name
AND T2.id <= MyTable.id);
(第二个子查询解析了重复名称导致的重复sortid
值。)