按排序顺序更新表

时间:2016-04-13 08:03:52

标签: sqlite

我正在维护下面的表结构。

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 

1 个答案:

答案 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值。)