1

我有一个都有唯一 ID 的数据库。它们按升序排列,我想做..

update text SET name = 'hello french man' where id=1;

并将每一行的名称更改为我拥有的数据。所以我可以不断增加

id = id + 1;

但是问题出现在这里,我过去删除了一些行,所以缺少ID。例如,有第 1、2、3、5 行。第 4 行丢失是因为我已将其删除,那么如何在不跳过名称的情况下更新每一行,因为更新第 4 行无济于事?

至关重要的是,我必须与它们进行 1-1 映射,并且不要跳过任何名称,因为顺序很重要。

谢谢,非常感谢任何帮助!

4

1 回答 1

3

您可以使用此解决方案:

UPDATE tbl a
INNER JOIN
(
    SELECT id, @rn:=@rn+1 AS rn
    FROM tbl
    CROSS JOIN (SELECT @rn:=0) var_init
    ORDER BY id
) b ON a.id = b.id
LEFT JOIN
(
    SELECT id, @rn2:=@rn2+1 AS rn
    FROM tbl
    CROSS JOIN (SELECT @rn2:=-1) var_init
    ORDER BY id
) c ON b.rn = c.rn
SET a.id = COALESCE(c.id, a.id + 1)

查看 SQLFiddle 演示

于 2012-07-26T05:07:15.263 回答