如何通过顺序值从1开始的列值重置条件

时间:2018-08-13 03:27:31

标签: sql postgresql

我有一个表,其中包含3列:

  

id,优先级,dict_id

对于每个dict_id,它具有最高1000优先级,从1(顺序)开始。 当我删除某些优先级时,如何使优先级列的值连续(不使用触发器)。 例如: 原始数据

id, priority, dict_id
1, 1, 1
2, 2, 1
3, 3, 1
4, 4, 1
5, 5, 1
6, 6, 1

删除ID 3和5后,表中的数据:

id, priority, dict_id
1, 1, 1
2, 2, 1
4, 4, 1
6, 6, 1

我想要这样的优先级列

    id, priority, dict_id
    1, 1, 1
    2, 2, 1
    4, 3, 1
    6, 4, 1

2 个答案:

答案 0 :(得分:1)

我不建议您这样做,因为在您使用Header = (MyCollection.Count > 1 ? "Items" : "Item"); 进行查询时,例如可以很容易地生成带有所需顺序的priority列,例如

ROW_NUMBER

您可能希望避免每次在表中添加/删除记录时都要支付频繁的DML罚款。

答案 1 :(得分:1)

您可以使用UPDATE FROM语法

UPDATE yourtab a 
SET    priority = s.priority 
FROM   (SELECT id, 
               row_number() 
                 OVER ( 
                   ORDER BY id) priority 
        FROM   yourtab) s 
WHERE  a.id = s.id;

Demo