重排数据库队列中的行,这些行是无序的

2024-04-19 00:37:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据库表,它跟踪项目列表,必要时插入和删除它们。我发现了一堆无序的行,我想在插入或删除一行时让一些东西来处理它。你知道吗

目前,我使用的是基本的insert语句

insert into this_queue (thing, queNum) VALUES ('thing1', 1)

delete from this_queue where thing = 'thing1'

update this_queue set queNum = queNum - 1 where queNum > 1

这些查询可以很好地从队列中删除单个项,但是当我删除不符合顺序的项时,它会使所有内容都不正常。你知道吗

我一直在想办法把排队的人排得井井有条。。。1、2、3、4、5、6等。。。添加或删除项目时。你知道吗

我想在插入或删除后,要么删除,要么添加1,检查是否有相邻的号码,如果没有再次计数,保持跟踪,一直走,直到我找到号码。然后我可以减去这个数,回到平方一。你知道吗

在使用python和mssqlserver2008r2时,我将python包含在标记列表中。你知道吗

这看起来有点混乱,所以我希望有人会有一个更优雅的方式。谢谢


Tags: 项目数据库列表queue语句thiswhere号码
1条回答
网友
1楼 · 发布于 2024-04-19 00:37:47

测试数据

CREATE TABLE Test_Order(Thing varchar(50), queNum INT) 
GO

INSERT INTO Test_Order (Thing, queNum) VALUES
('thing 1', 1),('thing 2', 2),('thing 3', 3),
('thing 4', 4),('thing 5', 5),('thing 6', 6),
('thing 7', 7),('thing 8', 8),('thing 9', 9)
GO

表格

╔═════════╦════════╗
║  Thing  ║ queNum ║
╠═════════╬════════╣
║ thing 1 ║      1 ║
║ thing 2 ║      2 ║
║ thing 3 ║      3 ║
║ thing 4 ║      4 ║
║ thing 5 ║      5 ║
║ thing 6 ║      6 ║
║ thing 7 ║      7 ║
║ thing 8 ║      8 ║
║ thing 9 ║      9 ║
╚═════════╩════════╝

删除一些随机记录

DELETE FROM Test_Order WHERE queNum IN (2, 4, 6)

更新表格

使用带有CTE的ROW\ u NUMBER()函数更新表。你知道吗

;With CTE
AS
 (
  SELECT  Thing
         ,queNum
         ,rn = ROW_NUMBER() OVER (ORDER BY queNum)
  FROM Test_Order
 )
UPDATE CTE
SET queNum = rn

使用INNER JOIN with ROW\ u NUMBER()函数更新表

UPDATE T1
SET T1.queNum = T2.rn
FROM Test_Order T1 INNER JOIN 
(
  SELECT  Thing
         ,queNum
         ,rn = ROW_NUMBER() OVER (ORDER BY queNum)
  FROM Test_Order
)T2
ON T1.Thing = T2.Thing 
AND T1.queNum = T2.queNum

最终结果

SELECT * FROM Test_Order

╔═════════╦════════╗
║  Thing  ║ queNum ║
╠═════════╬════════╣
║ thing 1 ║      1 ║
║ thing 3 ║      2 ║
║ thing 5 ║      3 ║
║ thing 7 ║      4 ║
║ thing 8 ║      5 ║
║ thing 9 ║      6 ║
╚═════════╩════════╝

相关问题 更多 >