SQL:删除已排序的行

时间:2014-11-12 10:17:07

标签: mysql sql

我有一张桌子:

item_id : int
image_id : int
position : int

对于每个PRIMARY KEY元组(item_id,image_id),都有一个唯一的位置,该位置没有空洞排序:

item_id image_id position
1       10       0 
1       21       1 
1       17       2 
1       113      3

删除(1,21)以保持正确排序的最佳方法是什么?我正在寻找最简单的SQL查询。

1 个答案:

答案 0 :(得分:0)

你可以创建更新你的桌子的触发器:

此触发器将被触发,并在删除任何行后更新位置列:

 CREATE TRIGGER trigName ON TableName
 AFTER DELETE 

 AS
    UPDATE T 
    SET t.position = n.position 
    FROM TableName AS T
    INNER JOIN (SELECT  itemID,imageID, ROW_NUMBER() OVER(ORDER BY id) - 1 as Position FROM TableName) as N ON t.itemID = n.itemID AND t.imageID = n.ImageID
GO