Стек LIFO, который толкает каждый поп в SQL
Приведенный пример таблицы, такой как:
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, которая выполняет толчок на каждом поп - извините, что я возможно вырезал любую терминологию.
1 ответ
Просто так, что здесь есть ответ:
Для просмотра списка я решил использовать:
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.