我有两个整数,它们是表中两个现有行的一些 ID。
我想要做的是只交换两行的值,除了它们的 ID。
例如,如果我给出了 ID 5 和 13,我想更改
ID columnA columnB columnC
5 343 "ABC" null
13 90 "DEF" "ZY"
Run Code Online (Sandbox Code Playgroud)
进入
ID columnA columnB columnC
5 90 "DEF" "ZY"
13 343 "ABC" null
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?ID 列不是 AUTO-INCREMENT,所以我不能鲁莽地插入具有任意 ID 的临时行。
您应该能够使用标准 SQL 执行此操作:
update t
set id = (case when id = 5 then 13 else 5 end)
where id in (5, 13);
Run Code Online (Sandbox Code Playgroud)
如果该id列具有唯一约束,则您可能会违反唯一约束。如果发生这种情况,一种方法是两步法。假设id始终为正:
update t
set id = (case when id = 5 then -13 else -5 end)
where id in (5, 13);
update t
set id = - id
where id < 0;
Run Code Online (Sandbox Code Playgroud)