更新表将每行从最大值增加1

时间:2014-09-16 17:01:08

标签: mysql sql sql-update max

我正在尝试将多行order字段逐一增加,同时考虑该字段的最大值。

CREATE TABLE IF NOT EXISTS `jobs`(
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(128) NOT NULL,
`order` INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY(`id`));

INSERT INTO `jobs`(`name`) VALUES("John"),("Steven"),("Marie"),("Clair"),("Richard"),("Rober"),("Barbara")

UPDATE 
    `jobs` AS `j1`, 
    (SELECT MAX(`order`) AS `max` FROM jobs) AS `j2` 
  SET `j1`.`order` = `j2`.`max` + 1
  WHERE `j1`.`id` > 4

它将Richard,Rober和Barbara的行设置为1,我想成为1,2,3如果我再次执行它,我希望它们是4,5,6

我知道如果列顺序为auto_increment / unique,那将是完美的,但在这种情况下不可能。

1 个答案:

答案 0 :(得分:1)

如果您可以使用用户定义的变量,那么您可以这样做

UPDATE 
    `jobs` AS `j1`
cross join (
select @r:= (SELECT MAX(`order`) AS `max` FROM jobs)
) t
  SET `j1`.`order` = @r:= @r + 1
  WHERE `j1`.`id` > 4

Demo for single update

Demo for 2 times update