在SQL中推送每个Pop的LIFO Stack

时间:2013-01-28 22:32:44

标签: sql stack push pop

给出一个示例表,例如:

CREATE TABLE TESTING_Order(
    Order INT, 
    Name VARCHAR(5)
)

INSERT INTO TESTING_Order 
VALUES
    (0, 'Zero'),
    (1, 'One'),
    (2, 'Two'),
    (3, 'Three'),
    (4, 'Four'),
    (5, 'Five'),
    (6, 'Six'),
    (7, 'Seven')

我想知道如何实现一种“堆叠”来显示,例如,第一个玩家每回合“左”移动的游戏中的转弯顺序。我可以使用两个更新语句来完成此任务:

UPDATE TESTING_Order
SET Order = Order + 1

UPDATE TESTING_Order 
SET Order = (SELECT Min(Order) -1 FROM TESTING_Order)
WHERE Order = (SELECT MAX(Order) FROM TESTING_Order)

我想知道是否有更干净/更正确的方法,特别是如果可以使用单个UPDATE语句完成其他方式。

换句话说,我认为我所追求的是一个更好的LIFO堆栈实现,可以对每个pop进行推送 - 请原谅我可能会对任何术语进行屠宰。

1 个答案:

答案 0 :(得分:2)

这里有一个答案:

要循环浏览列表,我决定使用:

UPDATE TESTING_Order
SET nOrder = 
    Case 
        WHEN (nOrder - 1) < 0 THEN (SELECT Count(*) FROM TESTING_Order) - 1
        WHEN (nOrder - 1) >= 0 THEN (nOrder - 1) % (SELECT MAX(nOrder) + 1 FROM TESTING_Order)
    END

这允许我以正确的方式移动列表(我意识到我的答案可能没有),并且有利于在一个语句中执行我所要求的操作。感谢您指出我正确的方向,Wiseguy