让我们考虑一下我有一张桌子:
CREATE TABLE student (
id int,
name varchar(128)
);
INSERT INTO student (id,name) VALUES
(1,'John'),
(2,'Bob'),
(3,'Alice'),
(4,'Don'),
(5,'Eve');
我需要“名称”列与下一个交换位置:1 与 2、3 与 4 等,但保持“id”的顺序。选择的输出应该是这样的:
id names
1 | Bob
2 | John
3 | Don
4 | Alice
5 | Eve
有没有一种有效的方法来编写可以给我预期结果的查询?
这听起来像是大学老师可能会想出的一项活动,以查看某人是否了解数学并具有一点想象力,因为在教育环境之外几乎不需要这种事情……我这样说在学术界工作的人。
也就是说,可以实现的一种方法是使用首先确定“正确”的子查询
id
。UPDATE
然后可以使用一条语句来匹配“proper_id”以修复数据。这是子查询:剩下的交给你
您可以在没有自连接的情况下执行此操作,并且无需多次执行相同的命令。
您只需要
LEAD
和LAG
窗口函数,以及一个行号:db小提琴
您可以自行加入学生并使用适合您的算法找到相应的 id
db<>在这里摆弄