使用列的最大值进行更新在mysql中不起作用


update with max value of the column is not working in mysql

我曾尝试为特定列设置max值,但这对我来说不起作用。我不知道哪里出了问题。

UPDATE `upload_video` 
             SET order_id ='select max(order_id)+1 
             FROM upload_video' 
             WHERE `video_id` = 22

这是我的查询,我单独运行select max(order_id)+1 from upload_video查询,它会给出结果。但是,如果我在更新查询中使用此查询,则该查询执行时不会出错。但是order_id没有正确更新。请帮我

您的查询在标准SQL中几乎是正确的,您只需要使用括号()而不是撇号':

SET order_id = (SELECT MAX(...) ...)

但是MySQL不允许在从同一个表中进行选择的同时更新表,解决方法是使用计算所需值的子查询,并将您的子查询与需要更新的表连接起来:

UPDATE
  upload_video JOIN (SELECT COALESCE(MAX(order_id),0)+1 max_id
                     FROM upload_video) s
SET
  upload_video.order_id=s.max_id
WHERE
  video_id=22

请看这儿的小提琴。

您在语句中有一个拼写错误,您使用了UPADTE而不是UPDATE

一个问题是,不要引用子查询。您使用了单引号,这意味着表达式select max(order_id)+1...被解释为文本文本(varchar)。但您显然不希望这样(我猜order_id是一个数字)。您想要的是评估子查询。但是,如果您尝试:

UPDATE `upload_video` 
         SET order_id =(select max(order_id)+1 
         FROM upload_video) 
         WHERE `video_id` = 22

MySQL不允许(我不知道)。PostgreSQL等其他数据库允许它。因此,您可能需要两个语句:

select @id = coalesce(max(order_id), 0) + 1 FROM upload_video;
UPDATE `upload_video` SET order_id = @id WHERE `video_id` = 22;

请注意,这在MySQL中有效,但在其他数据库中无效。

试试这个:

UPDATE `upload_video` 
SET order_id =(select COALESCE(max(U2.order_id),0)+1 
         FROM upload_video U2)
WHERE `video_id` = 22

Peraphs此查询出错,因为MySql不希望在UPDATE和子查询中使用相同的表。

如果你的情况,请写两个问题。

第一个获得最大值,第二个更新