SQLite:如何交换仅离开 ID 列的两行

Nae*_*mul 1 sql sqlite swap

我有两个整数,它们是表中两个现有行的一些 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 的临时行。

Gor*_*off 5

您应该能够使用标准 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)